先看 if else 一段代码

using System;

class Program
{
private static void Main()
{
int i = ; if (i == ) i = -;
else i = -; Console.WriteLine(i);
}
}

输出 -1

用IL DASM ("C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\ildasm.exe"vs2015 up3,项目框架.NET Framework 4.5.2)打开

.method private hidebysig static void Main() cil managed
{
.entrypoint
// 代码大小 26 (0x1a)
.maxstack
.locals init ([] int32 i,
[] bool V_1)
IL_0000: nop
IL_0001: ldc.i4.
IL_0002: stloc.
IL_0003: ldloc.
IL_0004: ldc.i4.
IL_0005: ceq
IL_0007: stloc.
IL_0008: ldloc.
IL_0009: brfalse.s IL_000f
IL_000b: ldc.i4.m1
IL_000c: stloc.
IL_000d: br.s IL_0012
IL_000f: ldc.i4.s -
IL_0011: stloc.
IL_0012: ldloc.
IL_0013: call void [mscorlib]System.Console::WriteLine(int32)
IL_0018: nop
IL_0019: ret
} // end of method Program::Main

在看三元表达式? :一段代码

using System;
class Program
{
private static void Main()
{
int i = ; i = i == ? - : -; Console.WriteLine(i);
}
}

输出 -1

.method private hidebysig static void Main() cil managed
{
.entrypoint
// 代码大小 20 (0x14)
.maxstack
.locals init ([] int32 i)
IL_0000: nop
IL_0001: ldc.i4.
IL_0002: stloc.
IL_0003: ldloc.
IL_0004: brfalse.s IL_000a
IL_0006: ldc.i4.s -
IL_0008: br.s IL_000b
IL_000a: ldc.i4.m1
IL_000b: stloc.
IL_000c: ldloc.
IL_000d: call void [mscorlib]System.Console::WriteLine(int32)
IL_0012: nop
IL_0013: ret
} // end of method Program::Main

明显,执行效率不一样。三元表达式? :执行效率更高。

using System;
using System.Diagnostics; class Program
{
private static void Main()
{
int i = ; Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
for (int j = ; j < ; j++)
{
if (i == ) i = -;
else i = -;
}
stopwatch.Stop(); Console.WriteLine(stopwatch.ElapsedMilliseconds); stopwatch.Reset(); stopwatch.Start();
for (int j = ; j < ; j++)
{
i = i == ? - : -;
}
stopwatch.Stop(); Console.WriteLine(stopwatch.ElapsedMilliseconds);
}
}

[No0000B7]If else 与 三元表达式? : 效率对比的更多相关文章

  1. python全栈开发-Day12 三元表达式、函数递归、匿名函数、内置函数

    一. 三元表达式 一 .三元表达式 仅应用于: 1.条件成立返回,一个值 2.条件不成立返回 ,一个值 def max2(x,y): #普通函数定义 if x > y: return x els ...

  2. Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数

    本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...

  3. python之三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数

    一 三元表达式.列表推导式.生成器表达式 一 三元表达式 name=input('姓名>>: ') res='SB' if name == 'alex' else 'NB' print(r ...

  4. python之旅:三元表达式、列表推导式、生成器表达式、函数递归、匿名函数、内置函数

    三元表达式 #以下是比较大小,并返回值 def max2(x,y): if x > y: return x else: return y res=max2(10,11) print(res) # ...

  5. python递归-三元表达式-列表生成式-字典生成式-匿名函数-部分内置函数-04

    递归 递归: # 函数在调用阶段直接或间接地又调用了自身 应用场景: # 将列表中的数字依次打印出来(循环的层数是你必须要考虑的点)   -->  l = [1, [2, [3, [4, [5, ...

  6. Day4 闭包、装饰器decorator、迭代器与生成器、面向过程编程、三元表达式、列表解析与生成器表达式、序列化与反序列化

    一.装饰器 一.装饰器的知识储备 1.可变长参数  :*args和**kwargs def index(name,age): print(name,age) def wrapper(*args,**k ...

  7. 十七、python沉淀之路--三元表达式、列表解析

    一.三元表达式 a = '骑车' res = '好天气' if a == '骑车' else '睡觉' print(res) 睡觉 解析:res = '好天气'        if a == '骑车' ...

  8. Day05:装饰器,三元表达式,函数的递归,匿名/内置函数,迭代器,模块,开发目录

    上节课复习:1.函数的对象    函数可以被当作数据取处理2.函数嵌套    嵌套调用:在调用一个函数时,函数体代码又调用了其他函数    嵌套定义:在一个函数内部又定义了另一个函数 def foo( ...

  9. 闭包、装饰器decorator、迭代器与生成器、面向过程编程、三元表达式、列表解析与生成器表达式

    一.装饰器 一.装饰器的知识储备 不想修改函数的调用方式,但是还想在原来的函数前后添加功能 1.可变长参数  :*args和**kwargs def index(name,age): print(na ...

随机推荐

  1. 手机web——自适应网页设计(html/css控制) - 51CTO.COM

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...

  2. iOS平台软件开发工具(一)-新建的工程使用CocoaPods工具集成第三方框架

    CocoaPods是一款集合了上千个第三方开源库的开发工具,能够大幅度的提升团队项目的开发效率,降低时间成本. 那么就看一下CocoaPods这个工具在项目中的使用体现吧. 我们马上用ASIHTTPR ...

  3. JS实现标签页效果(配合css)不同标签下对应不同div

    显示页面tab.jsp </ div ></ body > </ html >   tab.css ul ,li { margin:0px; padding:0px ...

  4. 【转】国外程序员收集整理的PHP资源大全

    ziadoz在 Github发起维护的一个PHP资源列表,内容包括:库.框架.模板.安全.代码分析.日志.第三方库.配置工具.Web 工具.书籍.电子书.经典博文等等.伯乐在线对该资源列表进行了翻译, ...

  5. Android L(5.0)源码之图形与图像处理之动画——Frame、Tween、属性动画、SurfaceView

    工作中暂时还没涉及到,暂时先不总结

  6. Session监听事件的处理

    设置Session监听  在web.xml文件中: <listener> <listener-class>cjq.login.listener.UpdateLogOutTime ...

  7. jquery遍历二维数组

    function eachTowArray() {  var ar = [[1,2,3],[4,5,6],[7,8,9]];  var result="";   //结果存放变量  ...

  8. linux  指令 备注

    ss命令可用于查看系统的socket的状态.基本上ss是比较符合需求的ss -a 出来的答案比较完整,但是很乱...连dgram及stream都分开了ss -l 比较可能是需要的,这会列出所有正在使用 ...

  9. jQuery API 中文文档

    Reference: http://www.css88.com/jqapi-1.9/jQuery.proxy/

  10. PHP下的命令行执行

    PHP 的命令行模式 以下是 PHP 二进制文件(即 php.exe 程序)提供的命令行模式的选项参数,您随时可以通过 PHP -h 命令来查询这些参数. Usage: php [options] [ ...