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");

THE END!