在 C# 中,可以int
使用减号将正数变为负数,-
如下所示:
var positiveInt = 5;
var negativeInt = -positiveInt;
执行此操作时,是否会在后台进行额外的操作(即 CPU 实际上是否将数字乘以-1
)?
在 C# 中,可以int
使用减号将正数变为负数,-
如下所示:
var positiveInt = 5;
var negativeInt = -positiveInt;
执行此操作时,是否会在后台进行额外的操作(即 CPU 实际上是否将数字乘以-1
)?
您可以使用SharpLab或Godbolt Compiler Explorer查看 .NET JIT 编译器针对不同代码段发出的内容。具体而言,比较以下两种方法很有启发性:
对于
M1
,JIT 编译器执行常量传播并发出简单返回 的代码0xfffffffb
,表示常量-5
:但是对于
M2
,其中positiveInt
寄存器中的参数ecx
是一个未知值,JIT 编译器会发出一个neg
指令(对于 x86)来否定该值: