преобразование массива char в int с использованием c ++ - PullRequest
0 голосов
/ 18 мая 2019

Может кто-нибудь объяснить мне, как этот код приводит 16843009?Как это работает?

Как я видел в своих тестах, (int *)&x приводит к 0x61ff1b, и, насколько я знаю, это адрес первого элемента в массиве.и как результат *(int *)&x равен 16843009?Благодарю.

#include <iostream>

using namespace std;


int main()
{
    char x[5] = {1, 1, 1, 1, 1};
    cout << *(int *)&x;

   return 0;;
}

1 Ответ

3 голосов
/ 18 мая 2019

Если мы напишем 16843009 в двоичном виде, мы получим 1000000010000000100000001.Подставляя это с дополнительными нулями, мы получаем: 00000001000000010000000100000001.Каждые 8 ​​битов (которые являются символами) имеют значение 00000001, которое равно 1.

&x - это указатель на массив символов (в частности, char(*)[5]).Это интерпретируется как указатель на int.В вашей системе int, вероятно, составляет 4 байта, и все четыре из этих байтов отдельно установлены в 1, что означает, что вы получаете int, где каждые 8 ​​битов установлены в 1.

...