c++ - 连接按位运算的正确方法?

标签 c++

我需要连接一些按位运算,但当前输出似乎是错误的。拆分操作类似于这样:

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/

相关文章:

c++ - 解决数字整除的最快方法

c++ - 编译简单的openCV项目

c++ - 使用新模板参数递归调用模板化函数

c++ - Windows 上的远程音响系统

c++ - std::bind 与来自父类的重载函数

c++ - c++中堆上的二维矩阵分配

c++ - 使用内存映射文件进行序列化

c++ - 在 C++ 命名空间中存储大量消息

c++ - 如何将文件中的值放入数组

c++ - 使用带有多个参数的 scanf