我知道一个值小于 16(不超过 4 位)在int
. 我想按位或将其转换为char
. 我可以这样做:
c |= i;
还是这取决于字节序?如果有问题,会这样:
c |= (char)i;
解决这个问题?
在进行算术运算时,字节序无关紧要,它只在char
以其他方式处理值(大于 1 )时才重要,例如,当使用字符指针遍历保存较大值的缓冲区时。
在您的情况下,无需强制转换,自动算术提升将确保一切正常。编码:
char c = 0;
int i =3;
c |= i;
相当于
c = c | i;
表达式将被计算为int
,然后转换回用于存储。
它与字节顺序无关。c |= i;
将简单地工作。
我更喜欢做这样的事情,如果目标比源更宽(有更多位),它可以防止符号扩展:
c = c | (0x0f & i);
它还可以提醒源中的哪些位是要提取的目标位。
你最好使用c |= (char)(i);