1

我不明白为什么以下返回 1:

0x0102 && (0xff << 8)

据我了解,向左移位0xff八位会导致0x00; 任何事情都会anding导致0x00。我哪里错了?

4

5 回答 5

3

你正在使用logical AND,不是bitwise AND。替换&&&

尝试

0x0102 & (0xff << 8)

据我了解,将 0xff 向左移动 8 位会导致 0x00;和任何东西都会导致0x00。我哪里错了?

0xFF 是一个int. 通常它是 16 位或 32 位,具体取决于编译器设置。所以左移 8 位结果是0xFF00.

于 2013-02-06T01:11:15.353 回答
3

(0xff << 8)结果0xff00。按位与0x0102将产生0x0100(即true)。

但是,你没有做按位与。&&是逻辑与。&是按位与。您基本上要做的if 0x0102trueAND if (0xff << 8)is true,由于参数不为零,true因此会导致(转换为 1)。

于 2013-02-06T01:11:33.970 回答
2

&&是逻辑与。你想要按位 AND &,例如

0x0102 & (0xff << 8)

此外,向左移位0xff八位会导致0xff00,因为按位算术是整数而不是字节。

于 2013-02-06T01:10:56.680 回答
1

一个整数常量不是由简单的 8 位组成的,0xFF << 80xFF00.

于 2013-02-06T01:12:06.547 回答
0

请参见In C Left shift (char) 0xFF by 8 并将其转换为 int

0xff << 8 产生 -256。由于 AND 逻辑门的两边都不为 0,所以它会返回 true 或 1。

于 2013-02-06T01:17:03.993 回答