C++ - 移位返回负数

标签 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。

我做错了什么?

最佳答案

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

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

完全一样:

unsigned char c = a >> 6;

关于C++ - 移位返回负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33277310/

相关文章:

c - 如何将移位后的位存储在 C 中的按位运算中?

c - 如果所有低 7 位均已设置且没有分支,则设置第 8 位

Java Shift Operator 和自动升级

c - 按位运算位检查

java - 如何修复值相差 4 位的字节数组?

c++ - 使用 http 调用连接 C++ 应用程序?

c++ - 如何在 operator[] 的声明中将 decltype 应用于成员函数

c++ - 我该如何解决这种循环依赖关系?

c++ - 为什么我不能运行从源代码构建的 AssaultCube?

c++ - 构造函数初始化列表中的函数?