晚上好。
有人可以解释一下为什么以下代码从IF条件运行消息吗?
if ((~7 & 0x000f) == 8)
printf("Honesty is the best policy\n");
据我所知~7 = 11111001和0x000f = 00001111
谢谢!
答案 0 :(得分:3)
-7(确实是11111001)
不是〜7(11111000)
你离开了1。
11111000
&
00001111
==
00001000
是真的。
(这个答案遵循明显的问题,使用简化的8位模型来处理所涉及的值。)
答案 1 :(得分:1)
据我所知~7 = 11111001和0x000f = 00001111
从两个角度看,这是不正确的。
7属于int
类型。如果您所在的平台sizeof(int)
为4,则二进制的7
将为00000000 00000000 00000000 0000111
。因此,~7
将为1111111 11111111 11111111 1111000
。
即使忽略前3个字节,最后一个字节的位也不同。
答案 2 :(得分:1)
这里7 = 00000111 1的7的补码是11111000十六进制代码0X0000f = 00001111逐位,并且11111000&00001111 = 00001000的运算是8,即非零值,因此如果执行循环,它将打印“诚实是最好的策略“。