[英]what does 0 != do in this code?
在這段代碼中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和左移它〜我和7個地方。
a & b
注意到a
與ANDS
所有位與那些在b
。
一些鏈接:
http://en.wikipedia.org/wiki/Bitwise_operation
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.