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