我在Codewarrior中工作,并尝试执行向左(>>)的位移位到一个“字符转换”的整型变量,即:
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的正确结果...
你们有谁知道为什么会发生这种事吗?
发布于 2013-09-21 04:24:35
您正被操作符优先级所困扰。在表达式中:
char checksum_H=(char) checksum >>8;首先将checksum转换为char,从而丢失除低位字节以外的所有字节,然后右移8位,从而清除剩余的8位,因此返回0。
因此,它需要:
char checksum_H = (char)(checksum >> 8);以便先进行移位,然后再进行造型。
https://stackoverflow.com/questions/18924007
复制相似问题