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!

  • 相关阅读:
    stl rope
    vijos1574 摇钱树
    图论 Dijkstra+堆优化
    c++输入优化
    Vijos1579 宿命的PSS 最小生成树
    快速求n阶多项式乘积
    c++stl map
    C#函数式程序设计之惰性列表工具——迭代器
    C#函数式程序设计之泛型(下)
    C#函数式程序设计之泛型(上)
  • 原文地址:https://www.cnblogs.com/SoaringLee/p/10532305.html
Copyright © 2011-2022 走看看