我在尝试在C ++中使用位移时遇到了一些麻烦。
我有char a = 160
和char b = 0
。 a的值是0b10100000
。我想将a
的最左边的位移到b
,以便b
的值为2(0b10)。按照我的逻辑,这应该这样做:
b = (b << 2) | (a >> 6);
然而,当我检查b中的值时,它是-2
而不是2
,正如我所期望的那样。将其转换为unsigned char
会将其值更改为254。
我做错了什么?
答案 0 :(得分:1)
两种类型都必须是无符号的:
unsigned char a = 160;
unsigned char b = 0;
b = (b << 2) | (a >> 6);
与:
完全相同unsigned char c = a >> 6;