按位'&'操作者

时间:2013-12-09 11:02:24

标签: c bitwise-operators

我在按位'&'中缺乏一些基本的理解操作

5 = 101
4 = 100

那么为什么以下if条件的输出是 true 的原因和位101 & 100应该是 false

#include <stdio.h>
main()
{
   if(5&4)
      printf("Yes\n");
}

6 个答案:

答案 0 :(得分:18)

5是101。

4是100。

5 & 4 0:

101 
100 &
↓↓↓
100

问题解决了✓


<强>澄清

在C中,每个非零值都满足if条件。意思是,如果你写:

if (-5) {
  if (100) {
     // reachable code
  }
}

鉴于:

if (0) {
  destroyTheWorld(); // we are safe
}

答案 1 :(得分:3)

5 - 101
4 - 100
5&4 - 100

确实如此。

答案 2 :(得分:2)

因为0b100 & 0b101等于0b100而后者不等于0

答案 3 :(得分:2)

了解按位运算符真值表至关重要。请考虑以下情况,其中AB为输入,Y为输出。

<强>&安培; (按位和)当输入A和B为真时,输出为真;否则输出为假

A   B   Y
---------
0 | 0 | 0
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1

<强> | (按位或)当A或B或两个输入均为真时,输出为真;否则输出为假

A   B   Y
---------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 1

^(按位X-Or)当A和B为相反状态时,输出为真;否则输出为假

A   B   Y
---------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0

<强>! (按位不)输出是输入的相反状态

A   Y
-----
0 | 1
1 | 0

您的等式(5&amp; 4)==(0101&amp; 0100)== 0100 == 4 == true

  0101
& 0100
------
  0100

答案 4 :(得分:1)

0b101 & 0b100 = 0b100

5&4 = 4

和4不为零并打印Yes

答案 5 :(得分:1)

进入if条件。因为在&操作之后它返回非零值。在C中,对于所有非零值,它就像返回true一样。