考虑这个
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 范围超过)
- (3)如果它在某处转换,为什么 n.GetType() 给出 System.Int32 ?
编辑1:更正:现在你会得到我正在得到的。(对此感到抱歉)
变量 n = i + 1; 至
变量 n = i + 3;
Edit2:还有一件事,如果它溢出,为什么不引发异常?
补充:当溢出发生时,设置类型是不是不对
变量 n
相应地声明var n = i + 3;
另一种类型?
欢迎你提出一个更好的标题,因为这对……至少我没有意义
谢谢