Я получаю результаты от левого сдвига, которому не могу найти объяснение.
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?