跳到主要内容

位运算

运算技巧

lowbit运算:

x&(-x)

  • 作用:返回从左往右数最后一位1,(最右边一位)如10100,变为100,1010110变为10(返回的是十进制数)

举例:求n的第k位数字: n >> k & 1

int lowbit(int x){return x&(-x);}

n&(n−1)

(n−1) 解析: 二进制数字 n 最右边的 1 变成 0 ,此 1 右边的 0 都变成 1 。

n&(n−1) 解析: 二进制数字 n 最右边的 1 变成 0 ,其余不变。

题目

  1. 力扣:二进制中1的个数:https://leetcode.cn/problems/number-of-1-bits/
  • n & 1 = 0 ,则 n二进制 最右一位 为 0 ;
  • n & 1= 1,则 n二进制 最右一位 为 1 。
  • n >>= 1 将二进制数字 n无符号右移一位

注:

源码:x 的二进制 反码:x 的二进制取反 补码:反码 + 1