按位 '&' 运算符

Bitwise '&' operator

提问人:Programmer 提问时间:12/9/2013 最后编辑:Vadim KotovProgrammer 更新时间:3/9/2019 访问量:8536

问:

我对按位“&”运算符缺乏一些基本的了解。

5 = 101
4 = 100

因此,为什么以下条件的输出是 true cause,而 bit 的输出应该是 falseif101 & 100

#include <stdio.h>
main()
{
   if(5&4)
      printf("Yes\n");
}
c 按位运算符

评论

2赞 Kiril Kirov 12/9/2013
为什么你认为它应该是假的?
0赞 Some programmer dude 12/9/2013
在 C 中,所有非零的东西都是“真”。
0赞 Programmer 12/9/2013
因为如果我们比较 5 和 4 的每个位,它们都没有完全相同的位
0赞 alk 12/9/2013
Bitwise And Operator 的可能重复项

答:

22赞 Maroun 12/9/2013 #1

5 是 101。

4 是 100。

5 & 4不是 0:

101 
100 &
↓↓↓
100

问题解决了✓


澄清:

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

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

而:

if (0) {
  destroyTheWorld(); // we are safe
}
2赞 alk 12/9/2013 #2

因为等于而后者不等于.0b100 & 0b1010b1000

3赞 user1814023 12/9/2013 #3
5 - 101
4 - 100
5&4 - 100

这是真的。

1赞 sr01853 12/9/2013 #4
0b101 & 0b100 = 0b100

5&4 = 4

4 为非零,打印Yes

1赞 Imtiaz Emu 12/9/2013 #5

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

3赞 Fiddling Bits 12/10/2013 #6

了解按位运算符真值表至关重要。考虑以下情况,其中 和 是输入,是输出。ABY

&(按位和)当输入 A 和 B 为真时,输出为真;否则输出为 false

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

|(按位或)当 A 或 B 或两个输入均为 true 时,输出为 true;否则输出为 false

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

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

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

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

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

您的方程 (5 & 4) == (0101 & 0100) == 0100 == 4 == true

  0101
& 0100
------
  0100