2013-04-07 60 views
1

我正在開發一個項目,並且跟蹤單個字節中的標誌。C++ - 如何檢查是否與&運算符不相等

該字節可以設置幾個選項。例如:

0x00000001 - Person 
0x00000002 - Object 
0x00000003 - Vehicle 

現在,當談到時間來檢查這些對象,我們可以這樣做:

如果(標誌& 00000001) {// 這是一個人 }

問題是,我想知道如何檢查,看看它是不是一個人。原諒我,如果這是一個簡單的答案,但我已經嘗試,如果!標誌& 0x00000001,它不檢查。我也嘗試將它與0比較,但仍然沒有運氣。

+1

你是否希望一次設置多個標誌?如果是這樣,你如何區分(例如)既是人又是物體的東西,以及只是一輛車的東西?如果沒有,你應該使用相等('flags == 0x00000001')。 – Mankarse 2013-04-07 05:13:22

+0

我可以在一個字節中設置多個標誌嗎?我會怎麼做? – 2013-04-07 05:19:20

+0

@PladniusBrooks,簽出一個按位標誌教程。 'operator |'可以應用一個標誌。 – chris 2013-04-07 05:21:00

回答

8

你靠近。 operator!higher precedenceoperator&,所以你需要括號: '!'

if (!(flags & 0x00000001)) { 
    //this is not a person 
} 
+0

啊!非常感謝。我正在與一羣行業專業人士合作,這是他們的渲染功能。所以我的選擇沒有你的答案是要嵌套一切更深層次或有一個if(標誌&0x00000001){//什麼也不做} {else {//做這個}; – 2013-04-07 05:13:25

2

運算符的優先級高於運營商'&', 所以使用!(標誌& 0x1)代替。

PS:0x3不能呈現車輛,但它呈現一個人物和一個物體。使用0x4來呈現Vehicel。

+0

0x3上的好結果。正在嘗試以此爲例。哪些數字在字節級有效? – 2013-04-07 05:14:15

+0

@PladniusBrooks,任何'2^n'的結果對於單個位標誌都是有效的,其中'n'從0到'sizeof(type) - 1'。除這些之外的任何數字都可以是組合兩個或更多標誌(或0標誌爲零)的結果。您可能會發現將標誌定義爲「2 << 0」,「2 << 1」,「2 << 2」等更容易。 – chris 2013-04-07 05:14:48

+2

使用「1 << 0」,「1 << 1」,「 1 << 2'代替。要做到這一點,你應該找一本介紹二進制數和二進制算術的書。在這個網站上有各種各樣的建議,但挑選一些簡單和老式的東西。長大後,我有一本紹姆的綱要書,介紹了「半加器」和「加法器」的電路。請記住,如果你切斷了所有的手指(向Tom Lehrer道歉),則基數2與基數10相同。 – 2013-04-07 05:23:58

相關問題