我不明白为什么以下返回 1:
0x0102 && (0xff << 8)
据我了解,向左移位0xff八位会导致0x00; 任何事情都会anding导致0x00。我哪里错了?
我不明白为什么以下返回 1:
0x0102 && (0xff << 8)
据我了解,向左移位0xff八位会导致0x00; 任何事情都会anding导致0x00。我哪里错了?
你正在使用logical AND,不是bitwise AND。替换&&为&。
尝试
0x0102 & (0xff << 8)
据我了解,将 0xff 向左移动 8 位会导致 0x00;和任何东西都会导致0x00。我哪里错了?
0xFF 是一个int. 通常它是 16 位或 32 位,具体取决于编译器设置。所以左移 8 位结果是0xFF00.
(0xff << 8)结果0xff00。按位与0x0102将产生0x0100(即true)。
但是,你没有做按位与。&&是逻辑与。&是按位与。您基本上要做的if 0x0102是trueAND if (0xff << 8)is true,由于参数不为零,true因此会导致(转换为 1)。
&&是逻辑与。你想要按位 AND &,例如
0x0102 & (0xff << 8)
此外,向左移位0xff八位会导致0xff00,因为按位算术是整数而不是字节。
一个整数常量不是由简单的 8 位组成的,0xFF << 8是0xFF00.
请参见In C Left shift (char) 0xFF by 8 并将其转换为 int
0xff << 8 产生 -256。由于 AND 逻辑门的两边都不为 0,所以它会返回 true 或 1。