int和char的逐位OR

bitwise OR int and char

本文关键字:OR char int      更新时间:2023-10-16

我知道int中的值小于16(不超过4位(。我想将它按位或运算为char。我可以这样做吗:

c |= i;

还是将取决于endianness?如果这是一个问题,会这样吗:

c |= (char)i;

解决它?

Endianness在执行算术时并不重要,它只在以其他方式处理值(大于1 char(时才重要,例如,当使用char指针遍历包含较大值的缓冲区时。

在您的情况下,不需要强制转换,自动算术升级将确保一切正常。代码:

char c = 0;
int  i =3;
c |= i;

相当于

c = c | i;

表达式将被计算为int,然后转换回内存。

它与endianness无关。c |= i;将简单地工作。

我更喜欢这样做,如果目标比源更宽(有更多的位(,它可以防止符号扩展:

c = c | (0x0f & i);

它还可以提醒源中的哪些比特是要提取的目标比特。

您最好使用c |= (char)(i);