У меня возникли проблемы с использованием смещения битов в C++.C++ - смещение битов, возвращающее отрицательные числа
У меня есть char a = 160
и char b = 0
. Значение a равно 0b10100000
. Я хочу сдвинуть самые левые бит a
на b
, так что b
будет иметь значение 2 (0b10). По моей логике, это должно сделать это:
b = (b << 2) | (a >> 6);
Однако, когда я проверяю значение в б, это -2
и не 2
, как я бы ожидать, что это будет. Литье его в unsigned char
меняет значение на 254.
Что я делаю неправильно?
'(б << 2)' является совершенно ненужным, если 'б == 0 '; что произойдет, если вы просто «char b = a >> 6;»? –
'char' ->' unsigned char' – Matt
@JoachimPileborg Думал точно так же, но я не знаю ни одной машины, где целые числа имели бы самый высокий бит, описывают отрицательное число –