我不明白为什么以下内容会返回1:
0x0102 && (0xff << 8)
根据我的理解,将0xff
向左移位8位会导致0x00
;和anding
任何东西都会导致0x00。我哪里错了?
答案 0 :(得分:3)
您使用的是logical AND
,而不是bitwise AND
。将&&
替换为&
。
尝试
0x0102 & (0xff << 8)
根据我的理解,向左移位位数为0x8,导致0x00;并且任何事情都会导致0x00。我哪里错了?
0xFF是int
。通常它是16位或32位,具体取决于编译器设置。因此,向左移8位会产生0xFF00
。
答案 1 :(得分:3)
(0xff << 8)
会产生0xff00
。与0x0102
进行按位AND运算将产生0x0100
(true
)。
但是,你没有做一个按位AND。 &&
是合乎逻辑的AND。 &
是按位AND。你基本上做的是if 0x0102
是true
而if (0xff << 8)
是true
,由于参数不为零,因此导致true
(转换为1)。
答案 2 :(得分:2)
&&
是合乎逻辑的AND。你想要按位AND &
,例如
0x0102 & (0xff << 8)
此外,将0xff
向左移位8会产生0xff00
,因为逐位算术是整数而不是字节。
答案 3 :(得分:1)
整数常量不仅由8位组成,0xFF << 8
为0xFF00
。
答案 4 :(得分:0)
请参阅In C Left shift (char) 0xFF by 8 and cast it to int
0xff&lt;&lt; 8收益率-256。由于AND逻辑门的两侧都不为0,因此它将返回true或1。