簡體   English   中英

條件語句如何與按位運算符一起使用?

[英]How does condition statement work with bit-wise operators?

我試圖了解條件如何與按位運算符一起使用。 可以通過以下方法檢查數字是偶數還是奇數:

#include <iostream>
#include <string>
using namespace std;

string test()
{
    int i = 8;  //a number
    if(i & 1)
      return "odd";

    else
      return "even";       
}

int main ()
{
  cout << test();
  return 0;
}

我不了解的部分是if條件如何工作。 在這種情況下,如果i = 8,則in If語句將執行1000 & 1 ,這將返回等於8的1000。

如果i = 7,則在if語句中應該執行111 & 1 ,從而返回111等於7

為什么if(8)返回“偶數”而if(7)返回“奇數”呢? 我想我想了解在處理按位運算符時,if語句檢查的是True,什么是False。

當我寫下這個問題時,只是一個想法是因為它實際上在做

for 8: 1000 & 0001 which gives 0
for 7: 0111 & 0001 which gives 1?

是的,您說對了。 二進制&| 一點一點地執行。 以來

1 & 1 == 1
1 & 0 == 0
0 & 1 == 0
0 & 0 == 0

我們可以看到:

8 & 1 == 1000 & 0001 == 0000

7 & 1 == 0111 & 0001 == 0001

您的test函數可以正確計算一個數字是偶數還是奇數,因為a & 1測試1位置是否有1 ,而奇數只存在1。

實際上,在C,C ++和其他主要編程語言中, &運算符對整數類型的每一位都執行AND操作。 當且僅當兩個操作數的第n位等於1時,按位AND的第n位等於1。

例如:

8 & 1 =
1000 - 8
0001 - 1
----
0000 - 0

7 & 1 =
0111 - 7
0001 - 1
----
0001 - 1

7 & 5 =
0111 - 7
0101 - 5
----
0101 - 5

出於這個原因AND在偶數和1之間進行按位AND運算將始終等於0因為只有奇數的最低有效位等於1

C ++中的if(x)x轉換為布爾值。 如果整數非零,則認為該整數為true

因此,所有if(i & 1)所做的就是檢查是否在i設置了最低有效位。 如果設置,則i&1將為非零;否則為0。 如果未設置,則i&1將為零。

如果整數是奇數,則在整數中設置最低有效位,因此,如果i是奇數,則i&1為非零。

表達i & 1 ,其中iint ,具有類型int 根據i的低位的值,其值為10 在語句if(i & 1) ,該表達式的結果按照整數類型的通常規則轉換為bool0變為false ,非零變為true

您說的代碼實際上是按位運算符應如何工作的。 在(8&1)的示例中:

1000 & 0001 = 0000

因為在第一個值中,最后一位設置為0,而在第二個值中,最后一位設置為1。0&1 = 0。

0111 & 0001 = 0001

在這兩個值中,最后一位均設置為1,因此由於1&1 = 1,結果為1。

我的代碼中的if語句之一存在相同的問題。 i = 1000 1000 0000 12位二進制數 x = 0000 1000 0000 12位二進制數 那么if語句的結果是什么:if(i&x)? 是if(1)還是if(0)?

問候,莫辛

暫無
暫無

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

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