int或uint或什么

Asa*_*sad 3 c# int int32

考虑一下

        int i = 2147483647;
        var n = i + 3;
        i = n;

        Console.WriteLine(i);           // prints -2147483646    (1)
        Console.WriteLine(n);           // prints -2147483646    (2)
        Console.WriteLine(n.GetType()); // prints System.Int32   (3)
Run Code Online (Sandbox Code Playgroud)

我对以下很困惑

  • (1)int怎么能保持值-2147483646?(int range = -2,147,483,648 to 2,147,483,647)
  • (2)为什么打印-2147483648而不是2147483648(编译器应该决定更好的类型,因为int范围超出)
  • (3)如果它在某处转换,为什么n.GetType()给出System.Int32?

编辑1:做出更正:现在你将得到我正在获得的东西.(对不起)

var n = i + 1; 至

var n = i + 3;

Edit2:还有一件事,如果它是溢出的,为什么不引发异常?

增加:当发生溢出时,为其设置类型是不正确的

变种

在声明var n = i + 3;中相应的另一种类型?


欢迎你建议一个更好的头衔,因为这至少对我来说没有意义

谢谢

Mar*_*ers 6

更新:海报解决了他的问题.

1)这是预期的输出,因为你向int.MaxValue添加了3,导致溢出.在.NET中,默认情况下,这是一个合法的操作,在未经检查的代码中给出负值的回绕,但如果你checked在代码周围添加一个块,它将抛出一个OverflowException代替.

2)声明的变量类型var在编译时而不是运行时确定.添加两个Int32s的规则是提供Int32,而不是UInt32,Int64或其他东西.因此,即使在运行时您可以看到Int32的结果太大,它仍然必须返回Int32.

3)它没有转换为其他类型.