所以我正在研究整数提升,我知道类型提升仅适用于计算表达式时所操作的值。 我有这个示例,其中我采用等于 127 的 sbyte 并将其递增 1,然后将其输出到控制台并得到 -128。这是否意味着 sbyte 在递增过程中变成了 int,然后不知何故变成了 -128。 我想知道这到底是怎么发生的。
sbyte efhv = 127;
efhv++;
Console.WriteLine(efhv);
最佳答案
正如@Sweeper 在评论中指出的那样,整数提升不适用于 ++
运算符:++
就地修改值,这意味着修改后的值必须在
指定的数据类型。整数提升在这里没有任何意义。
正如@beautifulcoder 在 their answer 中解释的那样,你看到的效果就是a two's complement number溢出,因为 C# executes arithmetic operations in an unchecked context by default .
根据C# language specification一元 +
和二元 +
运算符确实发生整数提升,如以下代码示例所示:
sbyte efhv = 127;
sbyte one = 1;
Console.WriteLine((efhv).GetType().Name); // prints SByte
Console.WriteLine((efhv++).GetType().Name); // prints SByte
Console.WriteLine((+efhv).GetType().Name); // prints Int32
Console.WriteLine((efhv + one).GetType().Name); // prints Int32
( fiddle )
https://stackoverflow.com/questions/71720954/