if-else 与 三目 的效率比较

简单说一下 if-else 和 三目 的效率 (常数优化)
先放结论:
1.多用三目,少用if-else
2.如果用if,把概率大的放前面

下面是原理:
程序运行时,处理器会通过并行运算而加速运行,当遇到选择支时则会停下判断 (例如高速行驶的大卡车遇到了分岔路)
if-else 是先赋值再运算,为了节省时间,分支预测会先猜测运行 if 还是 else 并继续运行 (默认是if),若猜对则因并行运算而节省时间,若猜错则因消除运算而耗费时间。 (卡车直接冲向一边康康可不可以走通,如果可以则继续走,如果不可以则回头走另一条路)(成本是回到分岔处的时间)
三目 是先运算再赋值,遇到选择支时停止并行并判断条件。(在分岔处停下康地图) (成本是重新加速需要的时间)
在多数情况下,运算结果为0与为1的可能相近,分支预测&并行运算 会比三目耗费更多的时间,所以应更多的使用三目。
在一些情况下,运算结果大多为0或大多为1(80+%),这时 分支预测&并行运算 的损耗远小于三目,所以应选择 if-else

关于分支预测,可以参考这些文章:1.https://blog.csdn.net/rrrfff/article/details/44993467 2.http://www.cnblogs.com/yangecnu/p/introduce-branch-predict-pipelining-and-conditonal-move-instruction.html

优化 if else 代码可以从以下几个方面入手: 1. 使用三目运算符替代简单的 if else 语句。 例如,将以下 if else 语句: ``` if (a > b) { max = a; } else { max = b; } ``` 替换为: ``` max = (a > b) ? a : b; ``` 2. 将 if else 语句的顺序重新排列,将最可能出现的情况放在前面。 例如,将以下 if else 语句: ``` if (color == "red") { // do something } else if (color == "green") { // do something else } else if (color == "blue") { // do something else } else { // do something else } ``` 重新排列为: ``` if (color == "red") { // do something } else if (color == "blue") { // do something else } else if (color == "green") { // do something else } else { // do something else } ``` 这样可以减少 if else 语句的判断次数,提高程序效率。 3. 使用 switch case 语句代替多个 if else 语句。 例如,将以下 if else 语句: ``` if (day == 1) { // do something } else if (day == 2) { // do something else } else if (day == 3) { // do something else } else if (day == 4) { // do something else } else if (day == 5) { // do something else } else if (day == 6) { // do something else } else if (day == 7) { // do something else } ``` 替换为: ``` switch (day) { case 1: // do something break; case 2: // do something else break; case 3: // do something else break; case 4: // do something else break; case 5: // do something else break; case 6: // do something else break; case 7: // do something else break; } ``` 这样可以使代码更加简洁易读,同时也可以提高程序效率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值