2015-10-22 4 views
1

У меня возникли проблемы с использованием смещения битов в 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.

Что я делаю неправильно?

+1

'(б << 2)' является совершенно ненужным, если 'б == 0 '; что произойдет, если вы просто «char b = a >> 6;»? –

+0

'char' ->' unsigned char' – Matt

+0

@JoachimPileborg Думал точно так же, но я не знаю ни одной машины, где целые числа имели бы самый высокий бит, описывают отрицательное число –

ответ

1

Оба типа должны быть без знака:

unsigned char a = 160; 
unsigned char b = 0; 
b = (b << 2) | (a >> 6); 

точно так же, как:

unsigned char c = a >> 6; 
Смежные вопросы