3

我知道一个值小于 16(不超过 4 位)在int. 我想按位或将其转换为char. 我可以这样做:

c |= i;

还是这取决于字节序?如果有问题,会这样:

c |= (char)i;

解决这个问题?

4

4 回答 4

9

在进行算术运算时,字节序无关紧要,它只在char以其他方式处理值(大于 1 )时才重要,例如,当使用字符指针遍历保存较大值的缓冲区时。

在您的情况下,无需强制转换,自动算术提升将确保一切正常。编码:

char c = 0;
int  i =3;

c |= i;

相当于

c = c | i;

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

于 2013-05-08T13:25:42.253 回答
3

它与字节顺序无关。c |= i;将简单地工作。

于 2013-05-08T13:14:33.047 回答
1

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

c = c | (0x0f & i);

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

于 2013-05-08T13:26:11.470 回答
-3

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

于 2013-05-08T13:16:00.827 回答