这是我今天看到的关于移位运算的帖子,然后有了一点想法。
对于一个byte类型的变量a,a = 5 ,它的二进制补码为00000101,按照这个想法,逻辑右移一位的结果为00000010,正数的反码、补码、原码都一样,它的结果应该为2。
同一个变量,进行同样的初始化操作,算数右移一位,结果应该为10000010,也就是说,算数右移一位,这个数从正数变成了负数,结果为-2。
我不明白,为什么右移操作会连符号位一起改变,还有一点,就是,为什么移位操作会比乘除法更快捷?因为我要计算它的原码,对于负数,我还要计算反码和补码。
这个多个问题,我一个一个给你说吧
1. 为什么右移操作会连符号为一起改变,
这个嘛,确实不知道呢,毕竟别人这么设计,可能有很多考虑在里面吧,但是不知我这种渣渣能知道了的
2. 移位操作比乘除快
是因为对计算来说移位很简单,而如果要完成的一次乘除的话,可能需要更多的计算。具体为啥,可能你需要了解一下底层这么实现加减乘除的。
左移一位相等于乘2,右移一位相当于除2,移位是最快的计算方法,计算机内部的四则运算基本都是通过移位实现的。
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632