我在按位'&'中缺乏一些基本的理解操作
5 = 101
4 = 100
那么为什么以下if
条件的输出是 true 的原因和位101 & 100
应该是 false :
#include <stdio.h>
main()
{
if(5&4)
printf("Yes\n");
}
答案 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)
了解按位运算符真值表至关重要。请考虑以下情况,其中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&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一样。