【发布时间】:2015-10-22 09:08:39
【问题描述】:
我在尝试在 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。
我做错了什么?
【问题讨论】:
-
(b << 2)如果b==0是完全没有必要的;如果你只是char b= a >> 6;会发生什么? -
char-->unsigned char -
@JoachimPileborg 的想法完全一样,但我不知道任何机器的整数最高位为零来描述负数
-
可能您的
char a = 160并不是真正的 160,而是类似于 -96 的值(提示:如果 char 已签名,则最大值为 127,而 160 已超过此限制)。 -
@JoachimPileborg 啊没关系,我很愚蠢; 160 当然最高位设置为 1....