簡體   English   中英

按位'&'運算符

[英]Bitwise '&' operator

我對按位“&”運算符缺乏一些基本的了解。

5 = 101
4 = 100

那么, if條件為true的情況下,為什么以下輸出以及位101 & 100應為false

#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為true時,輸出為true; 否則輸出為假

A   B   Y
---------
0 | 0 | 0
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1

| (按位或)當A或B或兩個輸入都為true時,輸出為true;否則為true。 否則輸出為假

A   B   Y
---------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 1

^(按位X-Or)當A和B處於相反狀態時,輸出為true; 否則輸出為假

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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM