位操作常见用途介绍

目录

位操作

常用操作

参考:


位操作

名称运算规则特性实例
异或^两个位相同时位0,相异为1

1.一个整数与自己异或的结果是0

2.一个整数与0异或的结果是自己。

3.异或操作满足交换律。

4.与一个只有特定位是1的数进行异或就能翻转特定位。

 

1.在数组中找到只出现一次的数字(其他数都是出现两次)(特性1)。

2.用来交换两个整数a,b(特性1,2,3): 

a ^= b;b ^= a;a ^= b;

3.a的所有位翻转b(特性4):

b= a^(-1=0xFFFFFFFF);

与&两个位均为1时,结果才为1

除数是2次幂的取模运算:

a % (2^n) 等价于 a & (2^n - 1):

a % 2 等价于 a & 1 ,

a % 4 等价于 a & 2 ,

a % 8 等价于 a & 3

通过设计好的mask,进行对x进行操作:

1.判断x是偶数还是奇数: x&1=0偶数,-1奇数。

2.取低位8bit,高位清0:x&255

3.判断一个整数是不是2的幂:x&x-1 = 0是2的幂,否则不是。

4.取x的奇数位并将偶数位用0填充:x & 0xAAAA 

5.取x的偶数位并将奇数位用0填充:x & 0x5555 

右移>>各二进位全部右移若干位,对无符号数,高位补0,有符号数,vs中采用补符号位(算术右移)

除数是2次幂的除法运算:

a / (2^n) 等价于 a>> n

计算nextPow2,详见此博客
左移<<各二进位全部左移若干位,高位丢弃,低位补0

乘数是2次幂的乘法运算:

a * (2^n) 等价于 a<< n

 
取反~0变1,1变0一个数的相反数 = 对一个数进行取反加1 

 

常用操作

取int型变量a的第k位(k=0,1,2……sizeof(int) -1)a>>k&1;
将int型变量a的第k位清0a=a&~(1<<k);
将int型变量a的第k位置1a=a|(1<<k);
求两个数的平均值((a&b) + ((a^b) >> 1));
交换shortx的奇偶位 ((x & 0xAAAA) >> 1) | ((x & 0x5555) << 1);
int类型的变量a求绝对值b

i = a >> 31;b = ((a ^ i) - i) ;

 

参考:

https://blog.yangx.site/2016/07/06/bit-operation-skills/

https://blog.csdn.net/hguisu/article/details/7892596

https://blog.csdn.net/morewindows/article/details/7354571

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ivy_0709

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值