8/4 ?= 2

来源:互联网 发布:windows正版好处 编辑:程序博客网 时间:2024/03/29 19:53

开发这么多年,听很多同学都说过,面试题总会遇到诸如8怎么计算得到2最快,有人会说8除以4嘛,很明显了。说这话的就是行外人啦,也有人会说不就是位移么?是的就是位移,但是怎么位移,下面就跟威哥来看一下

 

圈内人都知道,计算机是以二进制进行存储,运算的,也就是所谓的01010101...,无论是图片,数据还是什么其他都是以二进制形式来撸的。所以真正在计算8/4的时候计算机会把84先转换成二进制然后再进行运算,归根到底还是位移运算。

 

那么问题来了 如何把84转换成二进制呢,也就是十进制转换成二进制,十进制整数转换为二进制整数采用"2取余,逆序排列"法。具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

 

示例如下:


转换成二进制就是 10011100

 

也许到这里有人会说这个转换我也懂,没什么亮点嘛,那下面告诉大家一个速成法,应对面试题效果杠杠的。

 

我们可以将要转换成二进制的十进制数以二进制的数求和,比如

156 = 128 + 16 +8 = 2的七次方+2的四次方+2的三次方+2的平方

 

那么对应二进制我们可以这么看


有值得地方填一,其他没有的就补零得到的结果是一样的,也就是说如果八转换成二进制就是1000,那么同样的道理,将二进制转换成十进制方法也就是有一的位置 根据右边起定位得到2的相应次幂,如上就是

 

10011100 转换为十进制为 2的平方+2的三次方+2的四次方+2的七次方=128+16+8+2=156

说了这么多最后就为了引出最后八要怎么计算最快得到二呢,位移,那么怎么位移呢,如果 8/2=4  得到的这个商是2的几次幂,那么我们就可以说将8向右位移两位得到2是最快。

 

同理我们举个例子 将8向左位移两位,左移是扩大,结果便是八乘以2的平方也就是8*4=32,如图所示

 

如果将8向右位移两位,结果便是8除以2的平方,即8/4=2,如下图:

好了,8/2就讲到这里,面试中很多会遇到这个问题,大家可以学习一下。

0 0