【algorithm】有趣的邏輯運算:邏輯與和邏輯異或
阿新 • • 發佈:2018-11-02
Date: 2018.10.31
之前學了很久的數電,今天終於發現了其魅力所在,有點後知後覺了,哈哈…
最近發現一個有趣的演算法:
奇數與1異或相當於減1,偶數與1異或相當於加1。
虛擬碼如下:
if( a & 1 !=0 )
b = a - 1; // odd
else
b = a + 1; // even
上述程式碼等效於或者可以簡化為:
b = a ^ 1;
由此可見,通過這個演算法可以將複雜的邏輯判斷轉化成簡單的邏輯運算,提高運算效率。
另外,上述奇偶性的判斷也是採用的邏輯運算實現的,
通常,我們如下實現奇偶性:
if ( a % 2 == 0)
printf("a is even.\n");
else
printf("s is odd.\n");
採用邏輯運算簡化為:
if( a & 1 == 0)
printf("a is even.\n");
else
printf("a is odd.\n");
邏輯與的另一個用法:利用邏輯與進行大小比較
if( a >= (1<<=b) )
printf("a is larger or equal than 2^b.\n");
else
printf("a is lesser than 2^b.\n" );
通過邏輯與實現大小比較:
if( a & (1<<b) == 0)
printf("a is lesser than 2^b.\n");
else
printf("a is larger or equal than 2^b.\n");