我需要连接一些按位运算,但当前输出似乎是错误的。拆分操作类似于这样:
unsigned char a = 0x12
unsigned char x = 0x00;
x = a << 4;
x = x >> 4;
预期结果 x = 0x02; 当前结果 x = 0x02;
如果我尝试连接操作,结果是不正确的:
unsigned char a = 0x12
unsigned char x = 0x00;
x = (a << 4) >> 4;
预期结果 x = 0x02; 当前结果 x = 0x12;
提前感谢您的任何建议。
最佳答案
问题是(a << 4)
被转换为 int (通过 Integral promotion ),所以 (0x12 << 4) >> 4
本质上是 0x12
您要做的是转换回 (a << 4)
至 unsigned char
通过使用 static_cast
最终代码:
unsigned char a = 0x12;
unsigned char x = 0x00;
x = static_cast<unsigned char>(a << 4) >> 4;
关于c++ - 连接按位运算的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55739802/