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)
我对以下内容感到困惑:
- (1) int如何存储-2147483646的值?(int范围为-2,147,483,648至2,147,483,647)
- (2) 为什么这会打印出-2147483648而不是2147483648(编译器应该选择更好的类型,因为int范围超过了它)
- (3) 如果它被转换了,为什么n.GetType()会返回System.Int32?
编辑1: 进行了更正:现在您将获得我所获得的内容。(对此表示抱歉)
var n = i + 1; 更改为
var n = i + 3;
编辑2: 另外一件事,如果发生溢出,为什么没有引发异常?
补充: 当发生溢出时,按照正确的方式设置语句中的变量n的类型为其他类型是否正确?
如果这个标题不让人感到困惑,欢迎您提出更好的建议。
谢谢
var
的人,我认为这才是 OP 的真正问题。var
并不意味着“找出在这里使用最合适的类型”。它只是字面意思是“我懒得弄清楚你的输入类型,所以请帮我做到”。这并不意味着使用var
是不好的,但如果你想正确使用它,你需要理解它的作用。 - Michael Madsen