此代码中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 !=
部分&amp;如果我删除它就不起作用。
是否有任何网站深入教授按位操作?
答案 0 :(得分:4)
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&amp; 7)取i,翻转其中的所有位,然后将所有位转换为7位。
(1 << (~i&7)))
取1并左移~1&amp; 7位。
a & b
将a
和ANDS
与b
中的所有位相关联。
一些链接:
http://en.wikipedia.org/wiki/Bitwise_operation