作者:杨扬洒傻 | 来源:互联网 | 2023-05-18 10:26
Whenaddinganint32toa64-bitnativeint,doestheCLRsign-extendorzero-extendthe32-bitinte
When adding an int32
to a 64-bit native int
, does the CLR sign-extend or zero-extend the 32-bit integer? And most importantly: based on what information does it make this choice?
将int32添加到64位本机int时,CLR是否对32位整数进行符号扩展或零扩展?最重要的是:基于这些选择的信息?
I am writing a .NET compiler and have read the ECMA specification throughly, but could not find an answer.
我正在编写.NET编译器并且已经完全阅读了ECMA规范,但找不到答案。
The CLI supports only a subset of these types in its operations upon values stored on its evaluation stack: int32
, int64
, and native int
.
-- ECMA 335, Section I 12.1: Supported data types
CLI在其操作中仅支持存储在其评估堆栈上的值的这些类型的子集:int32,int64和native int。 - ECMA 335,第I节12.1:支持的数据类型
Since the values on the evaluation stack have no information on their signedness, instructions for which the signedness of the operands matter have two variants: one for signed and one for unsigned integers. The add
, sub
and mul
instructions (those that don't check for overflow) don't need to care about the signedness of the operands as long as the operands are the same size, and therefore have only a single variant. However, the operands are not always the same size...
由于评估堆栈上的值没有关于