按位'&'运算符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按位'&'运算符相关的知识,希望对你有一定的参考价值。

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

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

另一答案

理解按位运算符真值表是至关重要的。考虑以下情况,其中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
另一答案
0b101 & 0b100 = 0b100

要么

5&4 = 4

4是非零并打印Yes

另一答案

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

以上是关于按位'&'运算符的主要内容,如果未能解决你的问题,请参考以下文章

为啥按位运算符不如逻辑“和\或”运算符聪明

verilog 两个32位的数据怎么按位异或

C语言的位运算符和逻辑运算符

不清楚按位与赋值的使用

Go语言学习基础刷题记(Golang roadmap)2021-07-13

Go语言学习基础刷题记(Golang roadmap)2021-07-13