当我这样做时,发生了什么?

Int32 a = 0;
Int16 b = 50;

a = b;

最佳答案

像这样:

IL_0001:  /* 1F   | 32               */ ldc.i4.s   50
IL_0003:  /* 0B   |                  */ stloc.1
IL_0004:  /* 07   |                  */ ldloc.1
IL_0005:  /* 0A   |                  */ stloc.0


在较低的级别上,它取决于计算机体系结构和优化级别。像这样的无效代码,可能会完全省略。否则,它将是简单的代码,也许像这样:

movsx eax, word ptr [ebp+12]
mov [ebp+8], eax


movsx是x86指令,当它被加载到较大的目标位置时,它会保留较短数字的符号;基本上,它查看较小源代码的最高有效位,并在扩展数字时将其复制到其余位。

08-17 14:45