位运算技巧
数字和1相与 判断奇偶
x&1=1 奇数
x&1=0 偶数
不用其他空间交换两值
a=a^b;
b=a^b;
a=a^b;
或
a=a+b;
b=a-b;
a=a-b;
a^0=a a^a=0
不用其他空间找数组中唯一成对的那个数
int b=0;
for(int i=1;i<10;i++){
b=b^i;
}
int a[10]={1,3,4,3,5,6,8,7,9,2};
for(int i=0;i<10;i++){
b=a[i]^b;
}
printf("%d",b);
}
找出落单的那个数
数组中的数字依次异或
二进制中1的个数
int n;
int count=0;
scanf("%d",&n);
for(int i=0;i<32;i++){
if((n&(1<<i))==(1<<i)){
count++;
}
}
printf("%d ",count);
}
int n;
int count=0;
scanf("%d",&n);
for(int i=0;i<32;i++){
if((n>>i)&1==1){
count++;
}
}
printf("%d ",count);
}
(x-1)&x 消掉x最低位上的1
int n;
int count=0;
scanf("%d",&n);
while(n!=0){
n=n&(n-1);
count++;
}
printf("%d ",count);
}
用一条语句判断一个整数是不是2的整数次方(二进制中只有一个1)
即(n-1)&n==0
将二进制的奇偶位互换
int n;
scanf("%d",&n);
int a=n&0xaaaaaaaa;
int b=n&0x55555555;
int c=(a>>1)^(b<<1);
printf("%d",c);
}
0~1间浮点实数的二进制表示