2011-02-18 116 views
1
#include<stdio.h> 

int main() 
{ 
    int i=4, j=8; 
    printf("%d, %d, %d\n", i|j&j|i, i|j&j|i, i^j); 

    return 0; 
} 

輸出是:12,12,12
爲什麼上面的輸出顯示?任何人都可以解釋我?這段代碼做了什麼?

+5

認真嗎?你甚至試圖讀你的問題?您將**源代碼**發佈在標題和正文中的問題中?另外:你沒有告訴我們你想要「解決」哪個問題:你提供源和輸出,輸出有什麼問題? – 2011-02-18 09:23:28

回答

3

i | j&j | i是逐位OR iij&j之間(&超過|具有優先級)。這相當於i | j,所以:

i = 0b00000100 = 4 
j = 0b00001000 = 8 
i|j = 0b00001100 = 12 

i^j這裏是一樣的i | j因爲是設置爲1無論是在j和我沒有任何單個位。

0

閱讀http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B特別是運算符優先級部分應該清楚。

您正在使用按位,按位或按位XOR。

  • 按位AND保留所有存在於兩個操作數中的位。
  • 按位或零售存在於操作數中的所有位。
  • 按位異或保留所有位在之間的一個但不是兩個操作數。