簡體   English   中英

按位與:為什么我會得到這種行為?

[英]Bitwise AND: why do I get this behaviour?

我在這里有這個簡單的程序:

#include <iostream>
#include <bitset>

using namespace std;

int main() {

unsigned char a = 0b11100111; 
if((a & (1<<2)) == true) // THIS IS THE LINE
    cout << "Entering if block!" << endl;
else
    cout << "Too bad, maybe next time.." << endl;
bitset<8> x(a & (1<<2));
cout << x << '\n';
}

你能告訴我為什么這個if((a & (1<<2)) == true)輸出:太糟糕了,也許下次.. 00000100

而這個if((a & (1<<2))輸出:輸入 if 塊!00000100

我正在使用 g++ -std=c++14 進行編譯。

0b100是一個數字,不應與 true 進行比較。

嘗試將 if 語句更改為:

if (a & (1<<2))

或等效地

if((a & (1<<2)) != 0)

因為在if語句中,任何不為零的都被認為是true

這體現了使用多余的== true的陷阱,有些人喜歡為了清晰的目的而使用它:有時它會破壞代碼。

(a & (1<<2)) == true被評估時, truebool類型)被隱式轉換為值為1int類型,因此a也被轉換為int類型。

但是(a & (1<<2))不是1 ,所以運行了else

你想要更正常的if (a & (1<<2))嗎?

暫無
暫無

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

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