簡體   English   中英

枚舉類型的位運算

[英]Bit Operations with Enumerated Type

我的我的實驗室入門有些麻煩。 該實驗室具有以下說明:

給定值int input = 0b10010110確定個人喜歡什么運動。 假設此輸入中沒有錯誤。 從左到右,每個位置代表以下各項:足球,棒球,排球,游泳,壘球,足球,曲棍球,曲棍網兜球。

如果在該位置有一個1,則表示該人喜歡這項運動。 根據給定的“二進制”輸入,將用戶喜歡的所有運動輸出到屏幕上。 對於給定的二進制數,用戶喜歡足球,游泳,足球和曲棍球。

  • 不要使字符數組。

  • 確保使用枚舉數據類型。

我不確定如何比較字符串的每個位置是1還是0。我的一個想法是使用枚舉類型,將每個運動設置為十位數,而僅將其適當位置1個

enum sport{
    Football = 0010000000,
    Baseball = 0001000000,
    Volleyball = 0000100000, 
    ... , 
    Lacrosse = 0000000001
};

然后,我將在給定值“輸入”上左/右移動適當的時間,以僅保留指定位置的原始值並將所有其他值設置為0。對於足球:

input << 2; input >> 9; input << 7;

因此新的設置值為0010000000 這樣我就可以比較整個數字了。 對於每種情況,我都必須這樣做,但是我無法想到采用其他方法。

我完全離開了嗎? 有沒有一種更實用的方法可以使用位操作檢查每個位置的值? 感謝您的任何提前幫助。

使用按位AND運算符&

if (input & Football) {
    // Football bit is set
} else {
    // Football bit is not set
}

另請注意, 0b前綴是編譯器擴展,但不是標准C。在您的enum值中,以0前綴開頭的數字為八進制格式(您必須對此進行修復)。 我建議您使用十六進制格式進行位操作。

如果您通過將數字1左移適當的位置來定義運動值,則可以使事情更具可讀性。 實際上,您可以對運動值使用簡單的枚舉,並使用該枚舉指定將位移動多少位。

暫無
暫無

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

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