我正在使用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结果...
你们有谁知道为什么会发生这种情况?
答案 0 :(得分:0)
您被运营商优先级所困扰。在你的表达中:
char checksum_H=(char) checksum >>8;
您首先将checksum
转换为char
,从而丢失除低位字节之外的所有字节,然后向右移动8位,从而清除您仍然拥有的剩余8位,以及因此返回0。
所以它需要:
char checksum_H = (char)(checksum >> 8);
先进行轮班,然后再进行投射。