位运算技巧

位运算技巧

数字和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间浮点实数的二进制表示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值