Em C# pode-se transformar um positivo em int
negativo usando o sinal de menos -
assim:
var positiveInt = 5;
var negativeInt = -positiveInt;
Existe uma operação extra ocorrendo nos bastidores ao fazer isso (ou seja, a CPU está realmente multiplicando o número por -1
)?
Você pode usar o SharpLab ou o Godbolt Compiler Explorer para ver o que o compilador .NET JIT emite para vários trechos de código. Em particular, é instrutivo comparar os dois métodos a seguir:
Pois
M1
, o compilador JIT realiza propagação constante e emite código que simplesmente retorna0xfffffffb
, representando a constante-5
:Mas para
M2
, onde opositiveInt
argumento no registroecx
é um valor desconhecido, o compilador JIT emite umaneg
instrução (para x86) que nega o valor: