簡體   English   中英

在C ++中按位和

[英]bitwise AND in C++

我已經定義了這樣的枚舉:

enum blStatus {
   Class1 = 0x40,           /* 0000,0100,0000 */
   Class2 = 0x80,           /* 0000,1000,0000 */
   Class3 = 0x100,          /* 0001,0000,0000 */
   Class4 = 0x200           /* 0010,0000,0000 */
}

現在,在我的代碼中的某個地方:

 if ( status &= Class1 )
   ++c1;
 else if ( status &= Class2 )
   ++c2;
 else if ( status &= Class3 )
   ++c3;
 else if ( status &= Class4 )
   ++c4;

假設,狀態為此值:

 status = 143   /* 0000,1000,1111 */

在調試時,沒有任何條件成立。 但是“status&= Class2”是:

 0000,1000,1111 & 0000,1000,0000 = 0000,1000,0000

並且c2計數器必須遞增。 但在調試時,所有條件都被傳遞(忽略)並且沒有計數器增量。 為什么?

使用&而不是&=。

當你做x&= y時,你得到:

 x = x & y;

您真正想要的代碼:

if ( status & Class1 )

現在,在每個if子句之后,您保持狀態值不變。

這是因為您要更改status

if ( status &= Class1 )

status &= Class1status = status & Class1相同,因為結果狀態更改為0

status = 0000 1000 1111
Class1 = 0000 0100 0000  &
-----------------------
status = 0000 0000 0000

由於您只想檢查不需要進行分配的位:

if ( status & Class1 )

因為if ( status &= Class1 )會將0分配給狀態,所以在所有下一個條件中,status的值將為0,這樣就不會執行任何條件,並且不會增加conter的值。

運算符&=將計算結果放入左操作數(等於a = a & b )。 在計算表達式(status &= Class1)status變量為0並且所有以下條件都為FALSE

暫無
暫無

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

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