gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 09:28:08 26 4
gpt4 key购买 nike

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

关于c# - c#中的整数提升(以sbyte的范围为例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71720954/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com