[英]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.