24乘以2已知甲数等于2乘以3×48.4表示几乘以几,8表示几乘以几

java面试题之用最有效率的方法算出2乘以8等於几 - CSDN博客
java面试题之用最有效率的方法算出2乘以8等於几
这是网上流传的""的其中一题(二十八题),然后下面给出来的答案是
第二十八,编程题: 用最有效率的方法算出2乘以8等於几?  有C背景的程序员特别喜欢问这种问题。    2 && 3
粗看似乎很在理,大致想来2&&3会是移位操作,在Java的字节码中移位指令是ishl(右移),而在CPU上的硬件指令可能就会是shl(算术右移指令)。其实不然,如果熟悉汇编语言,还考虑过编译优化,2&&3根本不会使用移位操作,而是在编译时就优化计算出16来了。
但如果是写成这样的方式(int i = 2; int j = i&&2;),又是不一样的,大家可以从代码不同写法生成的Java操作指令或汇编指令看出个端倪。
对应的字节码指令
int i = 2 &&3;
0:&& bipush 16
编译时就把2左移3位的置算出来了,可以说降低了编译时效率栈中弹出int型值,存到位置为1的局部变量中
int i = 2 * 8;
int i = 2;int j = i * 8;
0:&& iconst_21:&& istore_12:&& iload_13:&& iconst_3 4:&& ishl 6:&& istore_2
常量2压栈栈中弹出int型值,存到位置为1的局部变量中位置为1的int型局部变量压栈常量3压栈左移位操作,结果值压栈栈中弹出int型值,存到位置为2的局部变量中
int i = 2;int j = i * 8;
0:&& iconst_21:&& istore_12:&& iload_13:&& bipush 85:&& imul 6:&& istore_2
javac 生成的字节码操作指令是 imul,javac未作优化
所以把代码写成 int i = 2 && 3,和写成 int i = 16; 是一样的,前者还有降低了编译时效率
下面再举例说明一下,VC++编译器,其实也会作这样的优化
对应的汇编指令
int i = 2 && 3;
mov dword ptr [ebp-4],10h
也是把2&&3算出来了,为16(10h),放入内存
int i = 2 * 8;
int i = 2; int j = i && 3;
mov&&&& dword ptr [ebp-4],2mov&&&& eax,dword ptr [ebp-4]shl&&&&& eax,3 mov&&&& dword ptr [ebp-8],eax
把2放入内存中 SS:[ebp-4]把 SS:[ebp-4] 整数传送到eax寄存器中对eax中的数据左移3位再把移位后的结果存到内存 SS:[ebp-8]中
int i = 2;int j = i * 8
VC++自动优化成移位操作,因为8为2的整数次幂
int i = 2;int j= i * 9;
mov&&&&& dword ptr [ebp-4],2mov&&&&& eax,dword ptr [ebp-4]imul&&&&& eax,eax,9 mov&&&&&& dword ptr [ebp-8],eax
生成的汇编指令为 imul ,因为9不是2的整数次幂
所以从回答说是 int i = 2 && 3; 并没改变一点执行上的效率,因为它 int i = 16; 是完全一样的。但如果写成
int i = 2; int j = i && 3;
int i = 2;int j = i * 8:
确实会提高一定的执行效率, 因为 i * 8,要用Java操作指令 imul 进行运算,这也只是说JDK的编译器javac是这么处理的。JDK编译时并没有 i * 8 优化成 i && 3 。
如果把代码换成是C++代码,也是写成
int i = 2;int j = i * 8:
由VC++编译出来的汇编指令代码也还是用 shl eax, 3,它和写成 int j = i && 3 全一致的。VC++从效率出发已经给你作了这样的代优化,再回味一下这个问题的答案中的一句话"有C背景的程序员特别喜欢问这种问题。",可以获知那个有C背景的程序员在这里耍了一个"小聪明",却又没有占到一点小便宜,只因为他低估了编译器的优化功能。
之所以问这样问题的人,他们只是基于这样一个事实,整数乘法或整数除法所需要的时钟周期远远大于移位操作所需的时钟周期,下面列出这个指令的基本执行时间:
移位指令&&&&&&&&&&&&&&&&&&& 寄存器移 1 位&&&&&&&& 时钟周期数为 2 整数乘法 IMUL&&&&&&& 16 位寄存器乘&&&&&&&& 时钟周期数为 128 ~ 154整数除法 IDIV&&&&&&& 16 位寄存器&&&&&&&&&&& 时钟周期数为 165 ~ 184
而即使 Java编译器在编译 int j = i * 8; 时用的是&& imul ,但真正执行这这段代码,由虚拟机JVM转换成本地代码是时候会不会进一步优化成用移位操作的汇编指也未得而知,必要时当然可追踪一下java.exe的执行过程,即使执行时会作此优化,在java中把 int j = i * 8 写成 int j = i &&3 ,可获取一点点的效率,微不足道。
任外,在Visual C++ .net 2003,还增加了对Intel Pentium 4 和 AMD Athlon的代码优化,当用 /G7 编译时,可以产生了更快(但更长)的指令序列,避免了使用 imul 指令,该指令在 Intel Pentium 4 上具有 14 个周期的滞后时间。如 i * 9,可能被编译成如下代码mov ecx, dword ptr _i$[esp-4]mov eax, ecxshl eax, 3add eax, ecx
本来应该是 imul 乘法指令,用/G7编译选项巧妙的生成了先左移3位,再加上原来的值。网上介绍的是这么说的,可以我在Visual C++ .net 2003,用/G7选项编译时却没有生成与上类似的汇编代码,仍然是生成的 imul 指令。
关于用有一篇文章可以参考 []
最后再从业务出发,比如说这样一个简单需求,A的工资是B的工资的8倍(B可是个低级奴隶了),这种情况下要你写代码是写成
salaryA = salaryB * 8;
salaryA = salaryB && 3;
这种问题不用回答了吧。
如果说用 int j = i &&3 的形式的情况有没有呢,也有,一般是在处理字节的时候,比如所有位整体左移3位,低3位再用字节填充,但也比较少牵涉到 8 倍这个概念。
我昨日就到一个公司面试,看了一些面试题(包括系统分析题),真不太想做,我那时候就跟他们说过:我一直以来就不太喜欢做题,做题的时候可能常常不是关注问题本身,还得留个意去揣摩出题人的用意。
象中国人的英语考试中的选择题那样,如果四个答案是分别是
A: aab    B: aac    C: aad    D: 456
一般老师会告诉你用排除法排除答案D,因为D太不相似了。
本文已收录于以下专栏:
相关文章推荐
在前一篇博文“ Git 初体验及其常用命令介绍(上) ”中,咱们已经了解了 Git 的一些常用命令了,包括status、init、add、commit和log等等,接下来,咱们接着上一篇博文的内容,继...
SSH(安全外壳协议,Secure Shell的缩写)由 IETF 的网络小组(Network Working Group)所制定,是建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会...
这是网上流传的&变态级JAVA程序员面试32问&的其中一题(二十八题),然后下面给出来的答案是
第二十八,编程题: 用最有效率的方法算出2乘以8等於几?
  有C背景的程序员特别喜欢问这种问题。
出处:/flydoos/archive//2169280.html
C#移位运算(左移和右移)
这是网上流传的“变态级JA...
原题 :新浪一道面试题:写一个函数,算出两个文件的相对路径。这个问题简单可以很简单,复杂可以很复杂看了下 网上的解题答案,发现只能解答特殊情况的路径,
// 比如 它们文件路径有着一对一的关系...
本篇博客主要讲述内容:面试题之用两个栈实现一个队列实现思路:用两个栈实现一个队列
类似于两个队列实现一个栈,就主要体现出队列的“先进先出的”原则,即实现push和pop两个操作;主要实现难点思路分析...
题目描述用两个栈实现一个队列。队列的声明如下,请实现它的两个函数:appendTail() 和deleteHead ,分别完成在队列的尾部添加结点以及在队列的头部删除结点。class MyQueue{...
在Windows下用文本编辑器创建的文本文件,如果选择以UTF-8等Unicode格式保存,会在文件头(第一个字符)加入一个BOM标识。
这个标识在Java读取文件的时候,不会被去掉,而且Stri...
今天在《剑指offer》里看到了下面这样一个简单且有趣的题,考察程序员的发散思维能力,前提是你对C++相关知识点熟悉,否则是想不出来方案的,分享给大家。
题目:求1+2+···+n,要求不能使用乘...
8、怎么在海量数据中找出重复次数最多的一个?
方案1:先做hash,然后求模映射为小文件,求出每个小文件中重复次数最多的一个,并记录重复次数。然后找出上一步求出的数据中重复次数最多的一个就是所求...
他的最新文章
讲师:王禹华
讲师:宋宝华
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)扫二维码下载作业帮
3亿+用户的选择
下载作业帮安装包
扫二维码下载作业帮
3亿+用户的选择
1, 72 的因数合,248的因数和 2., 把210个大小相同的正方形拼成一个长方形有几种拼法A是质数,B是奇数,且AxA+B=2007,那么Bx10001等于多少?1,2,3,4,5,6,7,8,9, 甲乙丙各拿3张 甲的乘积是24 乙是48
丙的三张的和是21,丙拿的是哪三张卡
宝蓝SJ_栗子196
扫二维码下载作业帮
3亿+用户的选择
72 的因数合=1+2+3+4+6+8+9+12+18+24+36+72=195……………………24=1×3×8 48=2×4×6 21=5+7+9 丙的三张 是5,7,9[请一题一问.]
为您推荐:
其他类似问题
A是质数,B是奇数,且AxA加B等于2007,那么Bx10001的积是多少?
扫描下载二维码您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
二年级数学上册第四单元.doc 38页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:150 &&
二年级数学上册第四单元
你可能关注的文档:
··········
··········
四、表内乘法
教学目标:
让学生在具体情境中体会乘法运算的意义。
让学生知道乘法算式各部分的名称,知道乘法的口诀是怎样得来的。熟记2~6的乘法口诀,比较熟练地口算6以内的两个数相乘。
使学生初步学会根据乘法的意义解决一些简单的实际问题。
结合教学使学生受到爱学习、爱劳动的教育,培养学生认真观察、独立思考等良好的学习习惯。
教学重点:
熟记2—6的乘法口诀,并能运用口诀解决乘法计算的问题。
教学难点: 4和6的乘法口诀
教材说明:本单元教材划分为乘法的初步认识、2~6的乘法口诀两节,包括以下一些内容:乘法的初步认识、2~6的乘法口诀、乘加和乘减、用数学。
乘法的初步认识
乘法的初步认识教学目标:使学生初步体会乘法的含义;认识乘号,会写、读乘法算式。
难点:使学生初步体会乘法的含义。学具准备:每个学生准备20根小棒。
教学过程:
出示游乐场图
师:小朋友们注意看图,游乐场不少小朋友都去过,那里有不少的数学知识,动一动脑筋把它们找出来。先看图上的小朋友和他们的爸爸妈妈都在做什么?
学生观察画面,自由发言,提出问题,教师适当引导。
算一算,小火车上坐了多少人?过山车上坐了多少人?5个小吊车的车厢呢?
交流计算方法和结果。
4.师:小朋友们,要分别算出玩各种游戏的人数,除了用加法计算外,还有其他方法吗?那么就请小朋友和老师一起去寻找。
摆图形游戏
要求:A 用准备好的小棒,摆出你所学过的图形。(长方形、正方形、三角形)
摆好后,算一算一共用了多少根小棒。
C 同桌交流,把算式写在纸上。
指名学生说加数相同的算式,教师板演。
让学生观察黑板上的各等式,找出它们的共同特点:每个等式中的加数都相同。
师:算几个相同数连加,除了用加法外,还可以用另外的方法——乘法。今天我们就来认识乘法。(板书课题)
以3+3+3+3+3+3=18为例,教学乘法算式的写法和读法。
师:这个连加算式表示什么?(6个3连加的和是18)
师:求6个3相加是多少可以用乘法计算。(教学乘号的写法)
师:按照从左到右的顺序读乘法算式,6×3=18 读作”六乘三等于十八”.用乘法算6个3连加得多少,也可以先写加数3,写件3×6=18
这个算式怎样读?
请学生把黑板上其他的加法算式改写成乘法算式。
同桌交流,你是怎样想的?
指名回答,完整板书。
小结:比较加法算式与乘法算式,得到:求几个相同数连加的和,用乘法计算比较简便..三.练习.
指导读书P46上半部分,并质疑。
书P46”做一做”
让学生说图意,明确计算“一共有多少个小朋友在荡秋千?”
独立填写加法算式和乘法算式。
指名校对,并说说算法及想法。
练习九第1题
看清图意,独立完成。
组织交流。
练习九第4题.
观察图意,确定“(
)”里分别填几。
独立填写乘法算式及读法。
指名校对。
乘法算式的读法与写法
开小火车读、齐读等形式。
(2) 5乘4
指名4人板演,其余写在纸上,并校对。
6.下面哪些算式可以直接改写成乘法算式?指它写出来。
2+2+2+2+2+2四.小结。
1.这节课你学习了什么知识?
2.师:通过这节课的学习,我们知道几个相同的数连加,可以用乘法计算。写乘法算式时,要明确相同的加数是几,有几个这样的加数,在这两个数中间写上乘号。读乘法算式时,按从左到右的顺序读。这节课,每个小朋友都学习了不少新知识,下节课我们继续学习乘法知识
板书设计:
乘法的初步认识
4+4+4+4=16
3+3+3+3+3+3+3=18
2+2+2+2+2+2=12
6 × 3= 18
5+5+5+5=20
教学反思:表内乘法是学生学习乘法的开始,它是今后表内除法和多位数乘、除法的基础。所以我结合具体活动情境,从学生认识相同数相加开始,结合具体的事例,通过动手、操作、观察、探究等学习活动,逐步体会乘法运算的意义。
在具体操作过程中,学生能够理解乘法是一种求相同加数和的运算。但由于涉及到的加
正在加载中,请稍后...}

我要回帖

更多关于 2乘以0等于多少 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信