我对位运算符'&'缺乏一些基础的理解。
5 = 101
4 = 100
所以为什么下面的
if
条件语句的输出结果是true,因为位运算101 & 100
的结果应该是false:#include <stdio.h>
main()
{
if(5&4)
printf("Yes\n");
}
我对位运算符'&'缺乏一些基础的理解。
5 = 101
4 = 100
if
条件语句的输出结果是true,因为位运算101 & 100
的结果应该是false:#include <stdio.h>
main()
{
if(5&4)
printf("Yes\n");
}
5是101。
4是100。
5&4
不是0:
101
100 &
↓↓↓
100
问题已解决✓
澄清:
在C语言中,每个非零值都满足if
条件。这意味着,如果您编写以下代码:
if (-5) {
if (100) {
// reachable code
}
}
鉴于:
if (0) {
destroyTheWorld(); // we are safe
}
5 - 101
4 - 100
5&4 - 100
这是真的。
理解位运算符的真值表是至关重要的。考虑以下内容,其中输入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
0b100 & 0b101
等于 0b100
,而后者不等于 0
。0b101 & 0b100 = 0b100
或者
5&4 = 4
并且4不为零,打印Yes
&
操作之后,它返回非零值。在C语言中,所有非零值都相当于返回true。