簡體   English   中英

使用按位運算符檢查位設置

[英]Check the bit settings with the bitwise operators

我有這個源 C:

#include <stdio.h>

#define BLUE 1
#define GREEN 2
#define RED 4

int main(void) {
    unsigned short i;
    char *array[8] = { "000", "001", "010", "011", "100", "101", "110", "111"};

    for(i = 0x0000; i <= 0x0007; i++) {
        printf("%d) %s -> ", i, array[i]);
        if(i & (BLUE | GREEN))
            printf("V\n");
        else
            printf("F\n");  
    }

    printf("\n\n");

    for(i = 0x0000; i <= 0x0007; i++) {
        printf("%d) %s -> ", i, array[i]);
        if(!((i | (BLUE)) ^ (i | (GREEN))))
            printf("V\n");
        else
            printf("F\n");  
    }

    return 0;
}

通過程序的第一個 FOR,我得到了關於表達式行為的真值表:

(i & (BLUE | GREEN))

也就是說,他們能夠驗證 BLUE 或 GREEN 位(或兩者)中的至少一個是否設置為 1。

現在,我想檢查 BLUE 和 GREEN 位是否都為 1。我設法用表達式做到了這一點:

(! ((i | (BLUE)) ^ (i | (GREEN)))))

但是我一點都不喜歡! 我以為我會使用“〜”而不是“!” 但它不起作用。 任何人都知道如何僅使用按位運算符來完成此操作?

我想檢查藍色和綠色位是否都為 1。

(i & (BLUE|GREEN)) == (BLUE|GREEN)

&應用於位的組合為您提供了那些位的子集。 您知道您可以通過查看結果是否為零(並非所有位都關閉)來測試其中的任何一個。 要測試所有這些,只需測試結果與您剛剛測試的位組合相同。

暫無
暫無

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

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