这段代码有什么作用?

时间:2011-02-18 09:21:22

标签: c printf

 #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
为什么显示上面的输出?任何人都可以解释一下吗?

2 个答案:

答案 0 :(得分:3)

i | j&j | iiij&j之间按位OR(&优先于|)。这相当于i | j,所以:

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

i ^ j这里与i | j相同,因为在j和i中没有单个位设置为1。

答案 1 :(得分:0)

阅读http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B,特别是运营商优先级部分应该明确这一点。

您正在使用按位和按位或按位异或。

  • 按位AND保留两个操作数中的所有位。
  • 按位OR零售 操作数中的所有位。
  • 按位XOR保留 one 中存在的所有位,但不保留两个操作数。