按位’&’运算符

我在按位’&’运算符中缺乏一些基本的理解。

5 = 101 4 = 100 

那么为什么以下if条件的输出是真的并且位101 & 100应该是假的

 #include  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

 0b101 & 0b100 = 0b100 

要么

 5&4 = 4 

4为非零并打印Yes

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

理解按位运算符真值表是至关重要的。 考虑以下情况,其中AB是输入, Y是输出。

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

 ABY --------- 0 | 0 | 0 0 | 1 | 0 1 | 0 | 0 1 | 1 | 1 

| (按位或)当A或B或两个输入均为真时,输出为真; 否则输出是假的

 ABY --------- 0 | 0 | 0 0 | 1 | 1 1 | 0 | 1 1 | 1 | 1 

^(按位X-Or)当A和B为相反状态时,输出为真; 否则输出是假的

 ABY --------- 0 | 0 | 0 0 | 1 | 1 1 | 0 | 1 1 | 1 | 0 

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

 AY ----- 0 | 1 1 | 0 

你的等式 (5和4)==(0101和0100)== 0100 == 4 == true

  0101 & 0100 ------ 0100