8/4 ?= 2
来源:互联网 发布:windows正版好处 编辑:程序博客网 时间:2024/03/29 19:53
开发这么多年,听很多同学都说过,面试题总会遇到诸如8怎么计算得到2最快,有人会说8除以4嘛,很明显了。说这话的就是行外人啦,也有人会说不就是位移么?是的就是位移,但是怎么位移,下面就跟威哥来看一下
圈内人都知道,计算机是以二进制进行存储,运算的,也就是所谓的01010101...,无论是图片,数据还是什么其他都是以二进制形式来撸的。所以真正在计算8/4的时候计算机会把8和4先转换成二进制然后再进行运算,归根到底还是位移运算。
那么问题来了 如何把8和4转换成二进制呢,也就是十进制转换成二进制,十进制整数转换为二进制整数采用"除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就讲到这里,面试中很多会遇到这个问题,大家可以学习一下。
- 8/4 ?= 2
- java treeMap 已经排好序即输出{1=, 2=, 4=, 5=, 6=, 8=}
- a(n+2)-4a(n+1)+4a(n) = 0 现在知道a(0) = x, a(10^8) = y, 求a((10^8)/2)
- 2=4?
- 2=4???
- 一个特大数运算的程序:1+2+4+8+……+2^100=?
- 一个特大数运算的程序:1+2+4+8+……+2^100=?
- 2/27-4/8
- 1 2 3 4 5 6 7 8 9=10 各个数可正可负 如何等于10
- 求s=2+4+8+16+32+64+......小于9000的最大值?
- 趣味问题(1 2 3 4 5 6 7 8 9 = 110)
- 完成等式:1 2 3 4 5 6 7 8 9=X
- 第三课作业1计算:1!+2!+3!+4!+5!+6!+7!+8!+9!+10!=?
- 算法小题二(求高次方程的一个实根2x^4-4x^3+6X^2-8x-8=0)
- 算法小题二(求高次方程的一个实根2x^4-4x^3+6X^2-8x-8=0)
- 常见排序算法-php 1.归并排序 $a = [1, 4, 6, 8, 10, 14, 16]; $b = [2, 3, 5, 8, 9, 11]; function merge_sort($a,
- src.checkVector(2, CV_32F) == 4 && dst.checkVector(2, CV_32F) ==4
- 最近做的一道随机问题,好像是int a[]={1,2,3,4,5,6,7,8,9}; 输出一个随机数组a[]={5,8,7,9,1,4,6,2,3};
- Android DiskLruCache完全解析,硬盘缓存的最佳方案(转)
- 时间管理
- 命令行shell 用于SQLite
- 对HashMap的“操”作
- c语言:新颖的进制灵活应用
- 8/4 ?= 2
- 黑马程序员——Java基础---面向对象
- BFS、DFS——机器人的运动范围
- 开始便持久 or 绑定共生死
- HTML学习3-超链接标签
- JQuery对象与DOM对象
- SpringMVC学习笔记(5):绑定数据(3)
- Spring-通过注解实现的AOP
- ssm整合过程中问题记录--异常:Access denied for user 'Administrator'@'localhost' (using password: YES)