赋值和比较哪个更快?「转https://www.v2ex.com/t/566943」

atwoodSoInterest
V2EX  ›  编程

赋值和比较哪个更快?

  •  1  
  atwoodSoInterest · 2019-05-23 14:13:56 +08:00 · 4148 次点击
这是一个创建于 405 天前的主题,其中的信息可能已经有所发展或是发生改变。

coding 中经常遇到一种情况。对一个变量赋值,是直接赋值,还是判断之后再赋值。 体现在代码上,大概是下面这种情况( i 和 num 都是 int ): if (i > 0) num = i; 或者 num = i; 我的疑问是到底哪个更快,自己用 C#做了测试:在循环一亿次的情况下,直接赋值速度更快。但是判断赋值会有部分是执行了 if 中的代码的,所以会导致了实验不纯粹。

然后我又用下面的代码测试了下,单纯的对比赋值和比较的效率

    static void Main(string[] args)
    {
        int num;            
        Console.WriteLine(DateTime.Now.ToString("mm:ss.fff"));
        for (int i = 0; i < 100000000; i++)
        {
            if (i > 1000)
            {
                //num = int.MaxValue;
            }
        }
        Console.WriteLine(DateTime.Now.ToString("mm:ss.fff"));
        Console.WriteLine("---");
        Console.WriteLine(DateTime.Now.ToString("mm:ss.fff"));
        for (int i = 0; i < 100000000; i++)
        {
        num = int.MaxValue;                
    }
    Console.WriteLine(DateTime.Now.ToString("mm:ss.fff"));
    Console.ReadLine();
}

结果发现还是直接赋值更快,在我本机上,判断执行一亿次速度是 226ms,赋值执行一亿次速度是 168ms。(大家也可以自己去 https://try.dot.net/试试)

最后从结果上来看,在整型的情况下,赋值是会比判断快的。

但是问题就来了,为什么呢? 我自己脑洞了一个答案,赋值到中间语言的时候就是 mov,比较到中间语言的时候是 cmp,mov 就直接把 01 丢到变量里去就可以了;但是 cmp 的话就要做减法,要做借位啊这那的操作,所以是赋值会更快。

强行解释了一波,感觉不是很信服。所以还请大家集思广益,破除疑惑~

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值