昨天笔试的一道题目,请大家帮忙看看

ggodblog 2010-10-18 01:15:59
昨天去MaxWit笔试C语言,有一个题目想请大大们帮忙解决下:
switch case 语句和if else语句哪个效率高?
我的理解是switch case应该比if esle的效率高,可是最后的答案不对,那边的老师说三种情况都有可能,效率高,效率低,效率一样。具体为什么我没方便问,还是不能懂,当时那个老师提了一句什么C本质什么的,不知道是什么,有知道的大大们请告知一下,谢谢啦!
...全文
188 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tony2251 2010-10-20
  • 打赏
  • 举报
回复
看下《深入理解计算机系统》里面有个比较详细的说明。
jslp 2010-10-20
  • 打赏
  • 举报
回复
这种题目出得太学究了,实际开发影响效率的基本不是 if else 和switch case的效率差别问题。

即使真在这个上面出现效率问题,换换试试就可以了。开发时考虑这种问题如同戴着脚镣跳舞。

准备开发操作系统、数据库还是编译器呀?这些问题在硬件的发展速度面前都是浮云。还是研究研究dang有几种写法吧。
风去沙来 2010-10-20
  • 打赏
  • 举报
回复
这个用逆向工程 更直观
ArayChou 2010-10-20
  • 打赏
  • 举报
回复
弱弱的说,感觉效率都是一样的吧?

如果编译器对两个都进行完美的优化,实现相同的功能,用switch和 if,编译出来的机器码应该是一样的。
freetstar 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sundesheng125 的回复:]

引用楼主 ggodblog 的回复:
昨天去MaxWit笔试C语言,有一个题目想请大大们帮忙解决下:
switch case 语句和if else语句哪个效率高?
我的理解是switch case应该比if esle的效率高,可是最后的答案不对,那边的老师说三种情况都有可能,效率高,效率低,效率一样。具体为什么我没方便问,还是不能懂,当时那个老师提了一句什么C本质什么的,不知道是什么,有知……
[/Quote]
对的
lilyapple 2010-10-20
  • 打赏
  • 举报
回复
这也太细了。。。
greenweather 2010-10-20
  • 打赏
  • 举报
回复
这可能是个感觉是个很蛋疼的问题啊
easylove 2010-10-19
  • 打赏
  • 举报
回复
跟控制条件的顺序有关系, swaitch 中 也是从上到下判断 直到找到满足条件为之 与if esle 一样
bourbaki 2010-10-19
  • 打赏
  • 举报
回复
我觉得对这个问题应该有三个角度。

一个是语言设计者。也许他认为分支结构普遍的有两种模式,是if-else和switch-case,他应该体现出来,而且这样可以给编译器的设计,特别是在性能优化上留出空间。

一个是编译器。比如我来写编译器,我就是故意把switch-case的实现做得差一点,你拿我怎么办?

一个是程序员。事实上,我觉得,除非是非常非常非常的对性能敏感,而且对机器和编译器的情况都比较了解,否则在这种细节上折腾,几乎总是事倍功半。
gohome520 2010-10-19
  • 打赏
  • 举报
回复
考得这么细呀。
跟while(1)与for(;;)哪个效率高是一类问题。

实际上,有没有必要考虑这么细呢? 现在的编译器都很强大,会自动优化得很好。
ggodblog 2010-10-19
  • 打赏
  • 举报
回复
下午的时候我给MaxWit那边打了个电话,好歹问到了些答案,将我理解的和大家分享下!
第一种情况,如果case条件是比较简单的情况,switch case会直接通过switch的条件直接跳转到相应的case处执行,效率比if else 高
第二种情况,如果case条件比较复杂一点,无法直接跳转,最后就被转换成和if else一样的程序
第三种情况,在第二种情况的基础上,如果自己写的if else条件将可能性较大的放在前面,此时if else就会比switch case的效率高

我只是半懂半记了,可能表达的不是很清楚,还不是特别的懂,感觉好像是对的,但好像说不好,听MaxWit那边的人给我讲解的时候很简单的样子,我自己就讲不好了,以后还要多出来和大家交流阿,谢谢楼上的朋友们,也希望我的答案能对你有些帮助
cangtiantiexue 2010-10-19
  • 打赏
  • 举报
回复
原来如此,还要考虑CASE的值的问题呀。
coding码场 2010-10-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 ggodblog 的回复:]
昨天去MaxWit笔试C语言,有一个题目想请大大们帮忙解决下:
switch case 语句和if else语句哪个效率高?
我的理解是switch case应该比if esle的效率高,可是最后的答案不对,那边的老师说三种情况都有可能,效率高,效率低,效率一样。具体为什么我没方便问,还是不能懂,当时那个老师提了一句什么C本质什么的,不知道是什么,有知道的大大们请告知一下,谢谢啦!
[/Quote]不过是switch还是if else,把出现概率大的项目放在最前面,效率就会高一些。
Linux-Torvalds 2010-10-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dizengrong 的回复:]

我们在学校中学的C基本上算是点皮毛而已~~~
要深入了解C可以看大师们写的书。
C专家编程很值得一看,这是我的体会
[/Quote]
assembly,而不是C专家编程之类的
dizengrong 2010-10-18
  • 打赏
  • 举报
回复
我们在学校中学的C基本上算是点皮毛而已~~~
要深入了解C可以看大师们写的书。
C专家编程很值得一看,这是我的体会
李迟 2010-10-18
  • 打赏
  • 举报
回复
C本质?还真没有研究过。谁普及普及?
强天放 2010-10-18
  • 打赏
  • 举报
回复
哦。学习。
freetstar 2010-10-18
  • 打赏
  • 举报
回复
ls说的比较好,当然还有与可能出现的条件的概率有关,
dizengrong 2010-10-18
  • 打赏
  • 举报
回复
这个问题感觉跟编译原理有关咧~~~
可以考虑当有很多分支时的情况:

对于if-else的执行是从上到下依次检测条件是否成立

而对于switch-case的编译器的实现可能是用一个数组来实现的,
而数组中的每个元素包括对应case的值和此条case语句的地址,这样一来自然是switch-case快了许多!
justkk 2010-10-18
  • 打赏
  • 举报
回复
不是很懂..
这些都是流程控制语句,效率的关键应该是具体分支执行的语句,而不是流程控制语句本身吧

2,161

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 UNIX文化
社区管理员
  • UNIX文化社区
  • 文天大人
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧