Я получаю результаты от сдвига влево, объяснения которым я не нашел.
unsigned char value = 0xff; // 1111 1111
unsigned char = 0x01; // 0000 0001
std::cout << "SIZEOF value " << sizeof(value) << "\n"; // prints 1 as expected
std::cout << "SIZEOF shift " << sizeof(shift) << "\n"; // prints 1 as expected
std::cout << "result " << (value << shift) << "\n"; // prints 510 ???
std::cout << "SIZEOF result " << sizeof(value << shift) << "\n"; // prints 4 ???
Я ожидал, что результат будет 1111 1110
, но вместо этого я получил int
(?) Со значением 1 1111 1110
.
Как можно сдвинуть биты беззнакового символа влево, чтобы биты были усечены и результат был 1111 1110?
Я пытаюсь прочитать серию байтов и интерпретировать их как целые числа разной длины (1-32 бита).
F0 F5
1111 0000 1111 0101
может быть
0F (first 4 bits)
0F (next 8 bits)
05 (last 4 bits)
Связано ли это с тем фактом, что арифметика не выполняется с типами меньшими, чем int?