Следующий код, выполняемый в eclipse, запущенный на Ubuntu и скомпилированный с использованием компилятора g ++, предоставляет неожиданные результаты.Почему вывод этой программы неожиданно?
код:
#include <iostream>
int main()
{
unsigned int a=5555;
std::cout << (unsigned int)(((char*)&a)[0]) << "\n";
std::cout << (unsigned int)(((char*)&a)[1]) << "\n";
std::cout << (unsigned int)(((char*)&a)[2]) << "\n";
std::cout << (unsigned int)(((char*)&a)[3]) << "\n";
return 0;
}
Я пытаюсь обработать переменную a
как массив целых чисел, каждая из которых одного размера байта. Когда я выполнить программу, это то, что я получаю в качестве вывода:
выход:
4294967219
21
0
0
вопрос:
Почему первое значение отображается так велико (здесь int
имеет размер 32 бит или 4 байта). Значит, каждое из выходных значений должно быть не более 255? И почему последние три значения равны нулю? Или почему я получаю неправильный результат?
Я также получил тот же результат при тестировании в блоке code :: block, работающем с тем же компилятором.
используя неподготовленный знак * на месте char * работал. – Sreram