题目 思路 备注
    位1的个数 移位 + 递归,一行代码 一行代码:return n==0 ? 0 : ( n & 1) + recursion(n >>> 1);
    汉明距离 移位+递归,一行代码 汉明距离定义:对应二进制位不同的位置数目, 一行代码如下——
    return x==y ? 0 : ((x & 1) == (y & 1) ? 0:1) + recursion(x >>> 1, y >>>1);
    颠倒二进制位 栈思想:n不断右移取末位数追加到r的末位 32次如下操作(结果左移,然后加上从n中取到的末位数字)——
    ret = (ret << 1) + (n & 1); n = n >>> 1;
    找缺失的数字 原理: a^b^a = b; 因数字范围是[0,n],故可利用数组下标:
    [0,n] 共n个(缺了一个)与数组的n个下标[0, n-1]做异或运算
    ret = n; for(inti=0;i<n; i++) ret = ret ^ i ^ nums[i];
    两整数之和 思路一:考虑二进制格式的两数相加
    - (a & b) << 1 表示两数和的进位部分,因此需要左移一位
    - a^b 表示两数和的不进位部分

    思路二: 使用对数性质,将加减转换为乘除:
    位运算 - 图1 =>
    位运算 - 图2 |
    - 位运算,一行代码:
    image.png
    - 对数运算
    image.png | | | | | | | | | | | | | | | | | | | | | | | | |