先看 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. xtrabackup数据库备份

    xtrabackup备份 一.Xtrabackup概述 1.1.简介 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Ho ...

  2. Ubuntu Server 14.04 & Apache2.4 虚拟主机、模块重写、隐藏入口文件配置

    环境: Ubuntu Server 14.04 , Apache2.4 一.Apache2.4 虚拟主机配置 01. 新建一份配置文件 在apache2.4中,虚拟主机的目录是通过/etc/apach ...

  3. CentOS 5.8 x64 源码安装 samba-3.6.9

    环境 CentOS 5.8 X64      wget http://www.samba.org/samba/ftp/stable/samba-3.6.9.tar.gz   tar zxvf samb ...

  4. artTemplate-3.0(与项目实际结合)

    引入artTemplate.js <script type="text/javascript" src="${ctx}/assets/plugins/artTemp ...

  5. Analyzing the Meaning of Sentences

    1. How can we represent natural language meaning so that a computer can process these representation ...

  6. (中等) POJ 2948 Martian Mining,DP。

    Description The NASA Space Center, Houston, is less than 200 miles from San Antonio, Texas (the site ...

  7. NULL、nil、Nil、NSNull的区别

    标志 值 含义 NULL (void *)0 C指针的字面零值 nil (id)0 Objecve-C对象的字面零值 Nil (Class)0 Objecve-C类的字面零值 NSNull [NSNu ...

  8. 仿复制粘贴功能,长按弹出tips的实现

    方案分析: 方案一:监听长按事件弹出PopupWindow[可行,缺点布局是固定的,小语种下会出现菜单截断现象] 方案二:弹出ContextMenu[不可行,因为ContextMenu的菜单是上下排列 ...

  9. uos事件控制块与任务同步

    Ucos为了任务之间的通讯定义了信号量,互斥性信号量,消息对象 消息队列等结构以及api,为了统一的管理这些同步,定义了一个结构叫做时间控制块OS_EVENT,如下 typedef struct os ...

  10. ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'

    提示:ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'.前两天也出现过这个问题,网上找了一个比 ...