int和char的逐位OR
bitwise OR int and char
我知道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);