接下來看看「位元運算子」(Bitwise operator),數位設計上有AND、OR、NOT、XOR與補數等運算,在C++中提供這些運算的就是位元運算子,它們的對應分別是AND (&)、OR(|)、NOT(!)、XOR(^)與補數(~)

位元運算對初學者來說的確較不常用,但如果用的洽當的話,可以增進不少程式效率,例如下面這個程式可以判斷使用者的輸入是否為奇數:

#include <iostream>
using namespace std;

int main() {
    int input = 0;

    cout << "輸入正整數:";
    cin >> input;
    cout << "輸入為奇數?"
         << (input&1 ? 'Y' : 'N')
         << endl;
 
    return 0;
}


執行結果如下:
輸入正整數:5
輸入為奇數?Y

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


00000011     3
00000001     1
00000001     判斷為奇數

出處:http://caterpillar.onlyfun.net/Gossip/CppGossip/LogicalBitwise.html

文章標籤
全站熱搜
創作者介紹
創作者 風箏 的頭像
風箏

風箏

風箏 發表在 痞客邦 留言(0) 人氣(540)