我在按位'&'运算符中缺乏一些基本的理解。
5 = 101
4 = 100
那么为什么下面的if
条件的输出是真正的原因和位101 & 100
应该是假的:
#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
是真的。
因为0b100 & 0b101
等于0b100
而后者不等于0
。
理解按位运算符真值表是至关重要的。考虑以下情况,其中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
^(按位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和4)==(0101和0100)== 0100 == 4 == true
0101
& 0100
------
0100
0b101 & 0b100 = 0b100
要么
5&4 = 4
4是非零并打印Yes
它进入if条件。因为在&
操作之后它返回非零值。在C中,对于所有非零值,它就像返回true一样。