(一).基本概念

(二).算法题目
1.位1的个数

解法:位运算

java
public int hammingWeight(int n) {
int count=0;
for (int i = 0; i < 32; i++) {
if (((n>>i)&1)==1){
count++;
}
}
return count;
}
2.比特位计数

计算:位运算

3.汉明距离

解法:位运算

java
public int hammingDistance(int x, int y) {
int xor=x^y;
int count=0;
for (int i = 0; i < 32; i++) {
if (((xor>>i)&1)==1){
count++;
}
}
return count;
}
4.只出现一次的数字

解法:位运算
将所有的数异或在一起,最后的结果就是只出现一次的数
java
public int singleNumber(int[] nums) {
int xor=0;
for (int num:nums) {
xor^=num;
}
return xor;
}
5.只出现一次的数字Ⅲ
260. 只出现一次的数字 III - 力扣(LeetCode)

解法:位运算

java
public int[] singleNumber(int[] nums) {
int xor=0;
for (int num:nums) {
xor^=num;
}
int h=1;
while ((xor&h)==0){
h=h<<1;
}
int group1=0;
int group2=0;
for (int num:nums) {
if ((num&h)==0){
group1=group1^num;
}else{
group2=group2^num;
}
}
return new int[]{group1,group2};
}
6.判断字符是否唯一
面试题 01.01. 判定字符是否唯一 - 力扣(LeetCode)

解法:位图

java
public boolean isUnique(String astr) {
char[] ch=astr.toCharArray();
int ret=0;
if (ch.length>26){
return false;
}
for (char c:ch) {
if (((ret>>(c-'a'))&1)==1){
return false;
}else{
ret=ret|(1<<(c-'a'));
}
}
return true;
}
7.丢失的数字

解法:位运算

java
public int missingNumber(int[] nums) {
int xor=0;
for (int num:nums) {
xor^=num;
}
for (int i = 0; i <=nums.length; i++) {
xor^=i;
}
return xor;
}
8.两整数之和

解法:位运算

9.只出现一次的数字Ⅱ
137. 只出现一次的数字 II - 力扣(LeetCode)

解法:位运算

java
public int singleNumber(int[] nums) {
int ret=0;
for (int i = 0; i < 32; i++) {
int sum=0;
for (int num:nums) {
if (((num>>i)&1)==1){
sum++;
}
}
sum%=3;
if (sum==1){
ret=ret|(1<<i);
}
}
return ret;
}
10.消失的两个数字
面试题 17.19. 消失的两个数字 - 力扣(LeetCode)

解法:位运算

java
public int[] missingTwo(int[] nums) {
int xor=0;
int n=nums.length+2;
for (int num:nums) {
xor^=num;
}
for (int i = 0; i <= n; i++) {
xor^=i;
}
int h=1;
while ((xor&h)==0){
h=h<<1;
}
int group1=0;
int group2=0;
for (int num:nums) {
if ((num&h)==0){
group1^=num;
}else{
group2^=num;
}
}
for (int i = 0; i <= n; i++) {
if ((i&h)==0){
group1^=i;
}else{
group2^=i;
}
}
return new int[]{group1,group2};
}