按位'&'运算符

问题描述 投票:7回答:6

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

5 = 101
4 = 100

那么为什么下面的if条件的输出是真正的原因和位101 & 100应该是假的:

#include <stdio.h>
main()
{
   if(5&4)
      printf("Yes\n");
}
c bitwise-operators
6个回答
21
投票

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

是真的。


2
投票

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


2
投票

理解按位运算符真值表是至关重要的。考虑以下情况,其中AB是输入,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

1
投票
0b101 & 0b100 = 0b100

要么

5&4 = 4

4是非零并打印Yes


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.