【发布时间】:2010-02-14 01:22:01
【问题描述】:
考虑一下
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 ? (整数范围 = -2,147,483,648 到 2,147,483,647)
- (2) 为什么这个打印 -2147483648 而不是 2147483648(编译器应该 决定更好的类型为 int range 超过)
- (3) 如果在某处转换,为什么 n.GetType() 给出 System.Int32 ?
Edit1: 进行了更正:现在您将得到我所得到的。 (对不起)
var n = i + 1;到
var n = i + 3;
Edit2:还有一件事,如果溢出,为什么不引发异常?
补充:随着溢出发生,是不是给
设置类型不对变种
在语句var n = i + 3; 中相应地转换为另一种类型?
欢迎您提出一个更好的标题,因为这对.... 至少对我来说没有意义
谢谢
【问题讨论】: