12
是否有一種方法通常用於檢查int/other數據類型中是否存在標誌?我想出了這樣的事情:按位檢查是否存在標誌
if ((host&flagtocheckfor)==flagtocheckfor)
它工作正常 - 但是這是一種常用的方法來設置標誌是這種方式標誌通常是檢查?還是有更簡潔的方法?
是否有一種方法通常用於檢查int/other數據類型中是否存在標誌?我想出了這樣的事情:按位檢查是否存在標誌
if ((host&flagtocheckfor)==flagtocheckfor)
它工作正常 - 但是這是一種常用的方法來設置標誌是這種方式標誌通常是檢查?還是有更簡潔的方法?
這很好完全是在支持它們的大多數語言中檢查位標誌的方式。
例如:
#define BIT_7 0x80
#define BITS_0_AND_1 0x03
if ((flag & BIT_7) == BIT_7) ...
if ((flag & BITS_0_AND_1) == BITS_0_AND_1) ...
雖然你可以檢查東西,如先用:
if ((flag & BIT_7) != 0) ...
不會實際上是第二個工作,因爲它會返回true,如果要麼的該位被設置,而不是。
對於完整性,C允許你設置位掩碼:
flag = flag | BIT_7; // or you can also use 'flag |= BIT_7'
你可以這樣清除它們:
flag = flag & (~BIT_7);
和撥動他們:
flag = flag^BIT_7;
啊哈 - 謝謝你,我不確定。 – ultifinitus
你不需要== flagtocheck的一部分。 &的結果是0(位已關閉)或非0(位已打開),並且在C中至少已經對應於False和True。 – librik
@librik,這對單位掩碼是可以的,但有些可能是多位的。看到我的答案。 – paxdiablo