簡體   English   中英

C ++邏輯與運算符

[英]C++ Logical AND Operator

我正在嘗試使用邏輯AND運算符,但出現了一些意外行為。

#include <iostream>

using namespace std;

int main() {
  unsigned flags = 0;
  cout << "flags = " << flags << endl;
  for(int i=0; i<3; ++i) {
    flags &= (1 << i);
    cout << "Anding with " << (1 << i) << endl;
    cout << "flags = " << flags << endl;
  }
  return 0;
}

實際輸出:

flags = 0
Anding with 1
flags = 0
Anding with 2
flags = 0
Anding with 4
flags = 0

預期產量:

flags = 0
Anding with 1
flags = 1
Anding with 2
flags = 3
Anding with 4
flags = 7

請注意,我可以通過在程序中簡單地用&替換+來獲得預期的輸出。 但是我想知道我在這里做錯了什么?

這是按位排列的常見錯誤,...人們認為a & b意思是“將a所有位與b所有位組合在一起……不然。這意味着”返回在兩個位中設置的位a b ”。

如果a為1,b為2,則二進制表示形式為0110 ...沒有共同點! 結果當然是0。

您需要使用按位 a | b a | b表示“返回了在任一組中的所有的位a b

如果a為1,b為2,則二進制表示形式為0110 ,因此結果為11或期望的3。

將這些操作視為集合操作“ 交集 ”和“ 聯合 ”,而不是二進制操作“ ”和“ ”,可能會有所幫助。

你混了| & 您的預期結果對應於以下迭代:

 flags |= (1 << i);

|=的按位OR將“添加”位到您的位集flags ,而按位AND只能刪除位。

暫無
暫無

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

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