0

我在 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 的正确结果。 ..

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

4

1 回答 1

0

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

char checksum_H=(char) checksum >>8;

您首先转换checksumchar,因此除了低位字节之外的所有字节都丢失了,之后您将右移 8 位,从而清除您仍然拥有的剩余 8 位,从而返回 0。

所以它需要是:

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

为了先进行轮班,然后再进行演员阵容。

于 2013-09-20T20:24:34.543 回答