zoukankan      html  css  js  c++  java
  • 【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!

  • 相关阅读:
    对deferred(延迟对象)的理解
    string 、char* 、 char []的转换
    char* 和 cha[]
    层序遍历二叉树
    之字形打印二叉树
    右值
    函数指针(待修改)
    top k

    哈夫曼编码
  • 原文地址:https://www.cnblogs.com/SoaringLee/p/10532305.html
Copyright © 2011-2022 走看看