>>右移

     今天看到一道题,题为:用最有效率的方法算出2乘以8等於几?

答案是:2 << 3,因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算cpu直接支持的,效率最高,所以,2乘以8等於几的最效率的方法是2 << 3。
首先,依题可知位运算cpu直接支持的,效率最高。其次就是一个数左移n位,就相当于乘以了2的n次方,比如2 << 3=16,-2 << 3=-16,如下图所示
在这里插入图片描述
看来好像按一个数左移n位,就相当于乘以了2的n次方的方法来算是ok的,那么问题来了,一个数右移n位,能否就相当于除以了2的n次方的方法来计算呢?
我们来试一个数14>>2=3,没问题,但是,-14>>2= - 4。
在这里插入图片描述
首先,关于正数,可得结论:1、一个数左移n位,就相当于乘以了2的n次方;2、一个数右移n位,就相当于除以了2的n次方。但是负数就不是了。那么这个-4 到底怎么算的呢?
第一,我们要知道,负数的二进制是可以通过它整数的二进制的反码、再对反码补码(+1)的出的。
第二,14的二进制为00000000 00000000 00000000 00001110,
反码为11111111 11111111 11111111 11110001 ,
(+1) 补码为11111111 11111111 11111111 11110010
所以-14的二进制为11111111 11111111 11111111 11110010
第三,-14>>2,负数右移,左补1,得:
11111111 11111111 11111111 11111100, -1得
11111111 11111111 11111111 11111011,反码得
00000000 00000000 00000000 00000100------十进制为4,所以
11111111 11111111 11111111 11111100是-4

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值