2013-02-16 86 views
1

我是位運算的一個初學者的意思(型,在C不是很有經驗要麼),我撞到的表達:這句話是什麼(1個<< Y)的位運算

x |= (1<<y) 

在第一我認爲它的意思是「x等於x或y移位通過對位左」,但後來我意識到,這將是:

x |= (y<<1) 

最後,我認爲它的意思是「x等於x或1左移y位左」,但我不明白1是在8位寄存器的哪個位置,這是否表示00000001?所以:

a = 2 
b = 1<<a // so b=00000010 

有人能告訴我這句話的正確含義。另外,如果任何人有解釋按位語法的好鏈接,我會很感激。 謝謝。

回答

2
x |= ... 

x = x | ... 

它指定的x | ...x的值的簡寫。

1 << y 

y1左移。例如。

00000001 << 1 -> 00000010 

所以,

x |= (1 << y) 

ORx1向左移位01​​(並將結果指定給x)。
換句話說,它將yyx設置爲1

x = 01010101 
x |= (1 << 1) -> 01010111 (it set the 2nd bit to 1) 
1

第一條語句表示左移1位(0b0000001)的二進制表示y位。然後或者用X代表值。 對於第二種說法,這個假設是正確的。 第三條語句將產生4(0b0000000100)。 就位操作語義而言,C標準定義了所有的位操作,以便二進制數從右到左以2的冪次遞增值從右到左讀取。您不必擔心字尾或兩個補碼等,編譯器將處理那對你。因此(0b00100)= 4,(0b000010)= 2,(0b00001)= 1,依此類推。

相關問題