zoukankan      html  css  js  c++  java
  • 判断x二进制编码中1的个数的奇偶性

    书上的代码是:

    short test_one(unsigned short x) {
      // 如果x二进制中有偶数个1, 返回1, 否则返回0
      short val = 1;
      while (x) {
        val ^= x;
        x >>= 1;
      }
      return val & 1;
    }
    

    但重点不在于这个功能本身, 而是想探讨一下xor.
    仅仅是一位的时候, xor与1有奇妙的关系, 那就是遇到1必然翻转(也就是从1变为0, 或者从0变为1), 遇到0不翻转.
    若开始为1,那么遇到1翻转为0,遇到0不翻转.
    若开始为0,那么遇到1翻转为1,遇到0不翻转.
    这就可以解释为什么上面的代码work了, 如果返回是1, 而val一开始就是1, 那也就表示没变, 说明翻转了偶数次, 因此x有偶数个1, 反之同理.

  • 相关阅读:
    AngularJS:模块
    AngularJS:事件
    AngularJS:HTML DOM
    AngularJS:SQL
    AngularJS:表格
    AngularJS:Select
    shell之数组
    java实现串中找数字
    java实现串的反转
    java实现串的反转
  • 原文地址:https://www.cnblogs.com/Tokubara/p/13838258.html
Copyright © 2011-2022 走看看