【algorithm】有趣的逻辑运算:逻辑与和逻辑异或

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.
");
else
    printf("s is odd.
");

采用逻辑运算简化为:

if( a & 1 == 0)
   printf("a is even.
");
else
   printf("a is odd.
");

逻辑与的另一个用法:利用逻辑与进行大小比较

if( a >= (1<<=b) )
   printf("a is larger or equal than 2^b.
");
else
   printf("a is lesser than 2^b.
");

通过逻辑与实现大小比较:

if( a & (1<<b) == 0)
    printf("a is lesser than 2^b.
");
else
    printf("a is larger or equal than 2^b.
");

THE END!

原文地址:https://www.cnblogs.com/SoaringLee/p/10532305.html