C#中使用负数简写时是否有额外的操作?

问题描述 投票:0回答:1

在 C# 中,可以使用减号

int
将正值
-
变为负值,如下所示:

var positiveInt = 5;
var negativeInt = -positiveInt;

执行此操作时,幕后是否会发生额外的操作(即 CPU 实际上是否将数字乘以

-1
)?

c# performance cil
1个回答
0
投票

您可以使用 SharpLabGodbolt Compiler Explorer 来查看 .NET JIT 编译器为各种代码片段发出的内容。特别是,比较以下两种方法具有指导意义:

static int M1()
{
    var positiveInt = 5;
    var negativeInt = -positiveInt;
    return negativeInt;
}

static int M2(int positiveInt)
{
    var negativeInt = -positiveInt;
    return negativeInt;
}

对于

M1
,JIT 编译器执行常量传播并发出仅返回
0xfffffffb
的代码,表示常量
-5

mov eax, 0xfffffffb
ret

但是对于

M2
,寄存器
positiveInt
中的
ecx
参数是一个未知值,JIT 编译器会发出一个
neg
指令(对于 x86)来否定该值:

mov eax, ecx
neg eax
ret
© www.soinside.com 2019 - 2024. All rights reserved.