计算机的位运算小结

补码:

负数是以补码的形式表示,其转换方式:先按正数转换,然后取反加1。

要将十进制的-10用二进制表示,先将10用二进制表示:
0000 0000 0000 1010
取反:
1111 1111 1111 0101
加1:
1111 1111 1111 0110所以-10的二进制为:1111 1111 1111 0110

按位与(&):

把两个数转为二进制,只有当相应位上的数都是1时,该位才取1,否则该为为0。

将10与-10进行按位与(&)运算:
0000 0000 0000 1010
1111 1111 1111 0110
-----------------------
0000 0000 0000 0010
所以:10 & -10 = 0000 0000 0000 0010

按位或(|):

把两个数转为二进制,只要相应位上存在1,那么该位就取1,均不为1,即为0。

将10与-10进行按位或(|)运算:
0000 0000 0000 1010
1111 1111 1111 0110
-----------------------
1111 1111 1111 1110
所以:10 | -10 = 1111 1111 1111 1110

按位异或(^)

把两个数转为二进制,只有当相应位上的数字不相同时,该为才取1,若相同,即为0。可以理解为不进位的加法

将10与-10进行按位异或(^)运算:
0000 0000 0000 1010
1111 1111 1111 0110
-----------------------
1111 1111 1111 1100
所以:10 ^ -10 = 1111 1111 1111 1100

取反(~)

每个位上都取相反值,1变成0,0变成1。

对10进行取反(~)运算:
0000 0000 0000 1010
---------------------
1111 1111 1111 0101
所以:~10 = 1111 1111 1111 0101

左移(<<)

用来将一个数各二进制位全部向左移动若干位。

对10左移2位(就相当于在右边加2个0):
0000 0000 0000 1010
--------------------
0000 0000 0010 1000
所以:10 << 2 = 0000 0000 0010 1000 = 40

右移(>>)

用来将一个数各二进制位全部向右移动若干位。

对10右移2位(就相当于在左边加2个0):
0000 0000 0000 1010
--------------------
0000 0000 0000 0010
所以:10 >> 2 = 0000 0000 0000 0010 = 2

 

其实这里面最有意思的属于异或了,

比如有两组数,其中一组比另一组多出来一个数,如何找到这个数,用异或处理最简单,所有数^ 最后剩下的就是多出来的数!

左移和右移

左移(<<1)相当于*2、右移(>>1)相当于/2

 

转载于:https://www.cnblogs.com/Robertzewen/p/11045364.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值