位运算分为逻辑运算符和移位运算符。
- 按位异或运算符^: 参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即:0^0=0, 1^0=1, 0^1=1, 1^1=0
- 按位或&:两位全为1,结果为1,否则为0
- 按位或|:两位中有一位为1,结果为1,否则为0
- 按位取反~ : 0-》1,1-》0
- 算术右移>> : 低位溢出,符号位不变,并用符号位补溢出的高位
- 算术左移<< : 符号位不变,低位补0
- >>>逻辑右移也叫无符号右移,运算规则:低位溢出,高位补0
/*给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。 示例 1: 输入:n = 2 输出:[0,1,1] 解释: 0 --> 0 1 --> 1 2 --> 10 */ class Solution { public int[] countBits(int n) { int[] ans = new int[n+1]; for(int i = 0;i<=n;i++ ){ ans[i] = countOnes(i); } return ans; } public int countOnes(int x){ int ones = 0; while(x>0){ x &= (x-1); ones++; } return ones; } }