2011-02-18 87 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保留所有存在于两个操作数中的位。
  • 按位或零售存在于操作数中的所有位。
  • 按位异或保留所有位在之间的一个但不是两个操作数。