对字符数组中的元素执行逐位操作
Bitwise operations on elements from array of chars
我已经制作了一个十六进制数字数组,我想按位将其相加。在我的程序中,我想用0x7F00添加0xFF。这是我的方法
#include <iostream>
using namespace std;
int main() {
char data[2] = {0xFF, 0x7F};
cout << (data[0] | (data[1] << 8)) << endl;
system("pause");
return 0;
}
我希望结果是0x7FFF,十进制为32767,但我得到了-1(十六进制为0xFF(。
您遇到的问题源于两个事实:
- 按位运算符需要对两个操作数进行积分提升
char
可以是有符号的也可以是无符号的
Promotion将较小类型的值(如char
或short
(转换为int
,并且作为其中的一部分,已签名的值将进行符号扩展。如果对char
进行了签名,则值0xff
将转换为(32位(int
值0xffffffff
,即-1
。
无论您在逐位OR中使用什么值,结果仍然是0xffffffff
。
简单的解决方案是明确使用unsigned char
(甚至更好的uint8_t
(作为阵列元素的类型:
uint8_t data[2] = {0xFF, 0x7F};
相关文章:
- 对字符串进行位操作
- 对字符数组中的元素执行逐位操作
- 逐位操作的隐式类型转换
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 如何进行特定的位操作?
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- 对OpenMP reduction子句中的变量执行原子操作
- 无法调用成员函数,尝试正确执行此操作仍然失败
- 不执行任何操作的函数调用C++
- C++避免位操作完全移位
- 如何通过使用 2 位或更多数字的 XOR 运算符来执行此操作C++问题
- 使用双包装器类进行位操作(C++、clang)修复性能下降问题
- 当我告诉它通过控制台执行此操作时,我的c ++循环不会停止
- 如果普通默认构造函数不执行任何操作,为什么我们不能使用 malloc 创建平凡可构造的对象?
- 生成线程并在运行时执行其他操作,只要它处于活动状态
- 如何检测函数是否执行IO操作
- GDI+-无法对Gdiplus::Graphics(C++)执行任何操作
- 使用位操作优化检查
- 子集相关位操作
- 对位集执行逐位操作的性能