c# - 当您将 Int32 设置为等于 Int16 时,幕后会发生什么?

标签 c# .net runtime

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

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 指令,它在将较短数字加载到较大目的地时保留较短数字的符号;基本上,它会查看较小源的最高有效位,并在扩展数字时将其复制到其余位中。

关于c# - 当您将 Int32 设置为等于 Int16 时,幕后会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1339029/

相关文章:

c# - 变量 using 声明、命名空间别名、using 指令

c# - c#中的引用类型和值类型有什么区别?

java.library.path 在 linux 上运行时错位

带触发器的 WPF 设计时与运行时样式差异

azure - QnA Maker - 运行时错误 : Authorization Failed

c# - 无法删除\bin\roslyn\VBCSCompiler.exe - 访问被拒绝

c# - 禁用排序 ListView

c# - 如何为 MS Outlook 开发插件?

c# - XML 中缺少标记会阻止 XmlSerializer 创建属性

c# - 如何强制使用 .Include 查询 Entity Framework 6 进行外部连接