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