布爾代數是一個數學知識體系,它在0和1的二進制值上演化而來的。
我們不需要去徹底的了解這個知識體系,但是裡面定義了幾種二進制的運算,卻是我們在平時的編程過程當中也會遇到的。這四種運算分別是或、與、非和異或。下圖展示了在布爾代數的知識體系中,對這四種運算的定義。
從左至右依次是非、與、或以及異或。這個圖闡述的是針對一位二進制的運算結果,我們可以將其擴大到N位二進制。比如兩個二進制[aw,aw-1...a1]和[bw,bw-1...b1],它們的四種運算則是對兩者每一個相對應的位上做相應的運算。
也就是說,倘若假設結果是[cw,cw-1...c1]的話,那麼對於任意ci都滿足 ci = ai (|,&,^) bi,如果是對[aw,aw-1...a1]進行非運算的話,那麼ci = ~ai。
在C語言中,也支持位運算,而它的計算方式就是布爾代數中的位運算。位運算我們最常使用的是掩碼的方式。比如我們知道一個整數x,如果我們想取得這個整數的最後一個字節的整數值的話,就可以采用位運算。就像下面這樣。
#include <stdio.h> int main(){ unsigned int i = 0x12345678; unsigned int j = 0xFF; unsigned int k = i & j; printf("%X\n",k); }
最終我們希望得到的結果是78,也就是整數i的最後一個字節的值,我們使用掩碼0xFF以及與運算過濾掉整數i的高位的三個字節。以下是結果。
查看本欄目