位运算

作者: professordeng | 来源:发表于2018-11-01 16:41 被阅读0次

    求一个 n 位的整数的二进制表式中有几个 1。

    • 样例:给定 32 (100000),返回 1;给定 5 (101),返回 2;给定 1023 (111111111),返回 9

    • 解决方法:num & (num-1) 可以每次将最右边的 1 消去,经过 x 次运算即可。

    int countBit(int num){
        int count = 0;
        while(num != 0){
         num = num & (num-1);
             count++;
        }
        return count;
    }
    

    判断一个数的二进制数里面 1 的个数的奇偶性,偶数返回 0,奇数返回 1。

    • 样例:给定 32 (100000),返回 1;给定 5 (101),返回 0;给定 1023 (111111111),返回 1
    • 异或运算有如下规律,加上异或表判断即可。
    1. a^b = b^a
    2. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c
    3. d = a ^ b ^ c 可以推出 a = d ^ b ^ c
    4. aba = b

    C 语言代码如下(关注点在 val 最低位的变化)

    int odd(int x){
        int val = 0;
        while(x){
            val ^= x;
            x >>= 1;
        }
        return val & 0x1;
    }
    

    相关文章

      网友评论

          本文标题:位运算

          本文链接:https://www.haomeiwen.com/subject/qqvxxqtx.html