2019.11.18--11.24第一周 位运算

1 原码反码补码之间的转换规则

位运算中以二进制补码形式进行运算。将十进制转换为二进制后,在最前面加上单位,占一字节,正数单位位是0,负数单位位为1。
正数的补码即为原码,负数的补码为原码取反加一。取反时注意单位位不变。
计算得到的结果为补码,正数补码即为其原码,负数原码为补码减一取反。

2 取反:~

将二进制中所有位数全部取反, 包括符号位,优先级为位运算中最高。
法则:~ 0=1,~1=0

3 按位与:&

两二进制数补码右对齐,同一位上均为1才为1,类似&&同真则真。
法则:1&1=1 ,1&0=0 ,0&0=0,即,任何数&0均为0
用法:1.将想要的位数定为1,不想要的定为0,这样设定另外一个特定数字,令它&原数,可保留想要的,使不想要的清零。
例如:使一个数的最低位为零,可以表示为:a&~1。
~1的值为1111111111111110,再按“与”运算,最低位一定为0。
2.用于二进制取位操作
例如一个数 & 1 的结果就是取二进制的最末位。
3.判断奇偶x&1== 0为偶,x&1==1为奇。

4 按位或:|

类似|| 一真则真。
法则:1|1=1,1|0=1,0|0=0,任何数|0均为其本身。
用法:类似于按位与,可利用1|1=1,0|1=1的性质将某数指定位更改为1。

5 按位异或:^

同真异假,相同则为1,不同则为零
法则:1^1=0,1 ^0=1, 0 ^0=0。
用法:(1)翻转某数,该数与一串1异或,每一位的0都成为1,1都成为0。
(2) 交换两变量的值,不需中间变量

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

则a与b的值发生了交换。
例如:a=3,b=4
a=011(2)
(∧)b=100(2)
a=111(2)(a∧b的结果,a已变成7)
(∧)b=100(2)
b=011(2)(b∧a的结果,b已变成3)
(∧)a=111(2)
a=100(2)(a∧b的结果,a已变成4)
(3)a^b=c,则a ^ c=b,c ^b=a

6 左移:<<

将一个运算对象的各二进制位全部左移若干位,右边补0。
注(1)当一次性左移的位数高于该数据类型的范围时,先取模再移动
如int 类型变量a ,int类型最高为32位。a<<33即为a<<(33%32),即只移动一个单位
(2)当左移位数不足该数据类型范围但移动后仍超出范围时,舍弃左端的数字。
如:a=111(2),a<<31会舍去最前方两个一,使最终的位数仍<=32。
(3))若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。 这一性质可以帮助我们快速运算乘法,减少时间复杂度。例如快速幂运算快速幂博客

7 右移 : >>

将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
与其说是右移,不如说是去掉二进制最末位更好理解。
操作数每右移一位,相当于该数除以2。注意事项及用法可类比左移。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值