按位与运算符 '&'

8

我对位运算符'&'缺乏一些基础的理解。

5 = 101
4 = 100

所以为什么下面的if条件语句的输出结果是true,因为位运算101 & 100的结果应该是false
#include <stdio.h>
main()
{
   if(5&4)
      printf("Yes\n");
}

2
为什么你认为它应该是假的? - Kiril Kirov
在 C 语言中,任何非零的值都被视为“真”。 - Some programmer dude
因为如果我们比较5和4的每个位,它们并不完全具有相同的位。 - Programmer
可能是[按位与运算符]的重复问题(http://stackoverflow.com/questions/15557063/bitwise-and-operator)。 - alk
6个回答

22

5是101。

4是100。

5&4不是0:

101 
100 &
↓↓↓
100

问题已解决✓


澄清:

在C语言中,每个非零值都满足if条件。这意味着,如果您编写以下代码:

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

鉴于:

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

3
5 - 101
4 - 100
5&4 - 100

这是真的。


3

理解位运算符的真值表是至关重要的。考虑以下内容,其中输入A和B是输入,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

^ (按位异或) 当A和B的状态相反时,输出为真;否则输出为假。

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 == 真

(注:“&”代表按位与运算符,“==”代表相等判断符号,“真”代表结果为真)
  0101
& 0100
------
  0100

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

1
0b101 & 0b100 = 0b100

或者

5&4 = 4

并且4不为零,打印Yes


1
它进入了if条件。因为在&操作之后,它返回非零值。在C语言中,所有非零值都相当于返回true。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接