什么是0 !=
在这段代码中做:
#include <stdio.h>
int main()
{
int i;
for(i=0;i<8*5;i++)
printf("%d",0 != ("HELLO"[i/8] & 1 << (~i&7)) );
return 0;
}
这是一个简单的字符串到二进制的转换。我了解 `("HELLO"[i/8] & 1 << (~i&7))
但我无法理解 0 !=
部分,如果我删除它,它就不起作用。
有没有深入讲解位运算的网站?
最佳答案
a != b
是等同于 true 或 false 的表达式。在 C 中,没有 true
和 false
,而是 0 被认为是假的,其他任何东西都被认为是真的。 a != b
等表达式如果为假,将返回 0,如果为真,则返回 1。 %d 是用于打印整数的格式字符串,因此 printf() 将打印此 0 或 1。
在这种情况下,a 是 0,b 是另一边表达式的野兽 ("HELLO"[i/8] & 1 << (~i&7))
详细说明其他操作:
("HELLO"[i/8] & 1 << (~i&7))
应该添加括号以使其更清楚:
(("HELLO"[i/8]) & (1 << (~i&7)))
(~i&7) 取 i,翻转其中的所有位,然后将所有位与 7 的位相加。
(1 << (~i&7)))
取 1 并左移 ~i&7 位。
a & b
占用 a
和 ANDS
b
中的所有位.
几个链接:
http://en.wikipedia.org/wiki/Bitwise_operation
关于c - 0 != 在此代码中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10596458/