c# - c#中的整数提升(以sbyte的范围为例)

所以我正在研究整数提升,我知道类型提升仅适用于计算表达式时所操作的值。 我有这个示例,其中我采用等于 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/

相关文章:

c# - C# 中的 StringBuilder 与 Span

c - 为什么静态链接的 "hello world"程序这么大(超过 650 KB)?

r - 创建一个虚拟变量,指示事件是否在过去 2 年发生

r - 如果列的值与另一列的值匹配,如何返回列的名称?

go - 函数参数的求值顺序是什么?

c# - System.IO.Directory.Exists 在 LINQ 语句中失败,但在 fo

sql - 如何使用 group by 检索不同的数据

javascript - 根据条件在嵌套的 JS 数组中插入新的 JSON 对象

linux - bash 将奇数日期格式转换为 linux 日期识别的更有效方法

ios - 在 SwiftUI 中声明 Binding 属性有什么区别?