C++ - 移位返回负数

C++ - Bit shifting returning negative numbers

我在尝试使用 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。

我做错了什么?

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

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

完全相同:

unsigned char c = a >> 6;