C ++ - 位移返回负数

时间:2015-10-22 09:08:40

标签: c++ bit-shift

我在尝试在C ++中使用位移时遇到了一些麻烦。

我有char a = 160char b = 0。 a的值是0b10100000。我想将a的最左边的位移到b,以便b的值为2(0b10)。按照我的逻辑,这应该这样做:

b = (b << 2) | (a >> 6);

然而,当我检查b中的值时,它是-2而不是2,正如我所期望的那样。将其转换为unsigned char会将其值更改为254。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

两种类型都必须是无符号的:

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

与:

完全相同
unsigned char c = a >> 6;