位运算总结

1、 位运算符号
&(按位与,二进制相同的位都为1才为1,否则为0);
|(按位或,二进制相同的位上只要有一个为1就为1);
^(按位异或,二进制相同的位上不一样为1,一样为0);
~(按位取反,不分正负数);
<<(按位左移,标准规定在右边补0);>>(按位右移,正数则左边补0,负数算术右移即负数补1)

2、 二进制位的变换操作步骤
1 确定符号
想得到1——>(按位或1)|1,其他位为0;
想得到0——>(按位与0)&0,其他位为1;
想取反——>(按位异或1)^1,其他位为0;
0和任何数按位异或(^)不改变原值;
1和任何数按位与(&)不改变原值;
2确定数字
3构造上一步数字

3、一些常见的二进制位的变换操作。
去掉最后一位 (100010001->10001000) --> x >> 1
在最后加一个0 (100010001->1000100010) -->x << 1
在最后加一个1 (100010001->1011011) --> (x << 1)|1
把最后一位变成1 (1000100->1000101) --> x | 1
把最后一位变成0 (1000101->1000100) -->(x | 1)-1
把最后一位取反 (1000100->1000101) --> x ^ 1
把右数第k位变成1 (10000001->10001001,k=4) -->x | (1 << (k-1))
把右数第k位变成0 (1001001->1000001,k=4) --> x & ~(1 << (k-1))
右数第k位取反 (101001->101101,k=4) |–>x ^ (1 << (k-1))
取末3位 (1101101->101) -->x & 7
取末23位–>x&0x7fffff
取末k位 (110001111->1111,k=4) -->x & ((1 << k)-1)
取右数第k位(1100001111->1,k=4) -->(x >> (k-1)) & 1
把右边连续的1变成0 (10000100111->100100000) --> x & (x+1)
把右起第一个0变成1(10000111011->10000111111) -->x | (x+1)
把右边连续的0变成1 (1100011000->1100011111) -->x | (x-1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值