Jen

C 語法 之 位元遮罩

#include <stdio.h>

int main(void) {
    int input = 0; 

    printf("輸入正整數:"); 
    scanf("%d", &input); 
    printf("輸入為奇數?%c\n", (input&1 ? 'Y' : 'N'));
    
    return 0;
}

 

執行結果如下:

輸入正整數:5
輸入為奇數?Y

這個程式得以運算的原理是,奇數的數值若以二進位來表示,其最右邊的位元必為1,而偶數最右邊的位元必為0,所以您使用1來與輸入的值作 AND運算,由於 1除了最右邊的位元為1之外,其它位元都會是0,與輸入數值AND運算的結果,只會留下最右邊位元為0或為的結果,其它部份都被0 AND運算遮掉了,這就是所謂「位元遮罩

 

如果把第 8 行

printf("輸入為奇數?%c\n", (input&1 ? 'Y' : 'N'));

改成

printf("輸入為奇數?%c\n", (input&111 ? 'Y' : 'N'));

意思就是說,你輸入的數字轉成2進位後,最後面是…111的話,就是True的結果。

 

輸入 8 就會是false,8=>  …01000

0 意見: