使用Codewarrior进行逐位移位的问题

时间:2013-09-20 18:59:59

标签: bit-manipulation shift codewarrior

我正在使用Codewarrior并尝试向左移位(>>)到“char-casted”int变量,即:

int checksum=0x017b;

char checksum_H=(char) checksum >>8; //higher part of checksum
char checksum_L=(char) checksum;     //lower part of checksum 

问题是,我实际上可以获得checksum_L的正确值,但对于checksum_H我得到0x00 ....并且只有当我尝试使用“>”执行转换时而不是“>>”能否得到正确的0x01结果...

你们有谁知道为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

您被运营商优先级所困扰。在你的表达中:

char checksum_H=(char) checksum >>8;

您首先将checksum转换为char,从而丢失除低位字节之外的所有字节,然后向右移动8位,从而清除您仍然拥有的剩余8位,以及因此返回0。

所以它需要:

char checksum_H = (char)(checksum >> 8);

先进行轮班,然后再进行投射。