来自异常的负int数是否表示不仅仅是一个数字?

Roy*_*mir -1 c# exception-handling .net-4.0

简单的代码确实:

int number = int.MaxValue;
    number = number+1;
Console.WriteLine(number);
Run Code Online (Sandbox Code Playgroud)

问题:

1)应该有overflowException.没有.这是为什么?

2)数字是否-2147483648表示:

  • )超出限制大小的字节数是多少?

  • )如果我明白了-2147483648 ,我怎么知道(如果没有例外) - 如果这个数字来自例外? - 我必须用Try Catch包裹吗?

ps当我写道:

int number = int.MinValue;
    number = number-1;
Console.WriteLine(--number);
Run Code Online (Sandbox Code Playgroud)

我得到了:( 2147483647仍然不例外).

Jon*_*eet 7

应该有overflowException.没有.这是为什么?

默认情况下,C#不执行溢出检查.您可以为整个程序集启用它(在VS的"构建"选项卡的"高级"位中,或/checked+从命令行)或使用checked关键字的块/表达式

对于你的问题的第二部分,-2147483648只是int.MinValue- 有符号整数这样做,从一个非常大的正数滚动到一个非常大的负数.

例如,如果使用sbyte(带符号的字节类型):

sbyte number = 127; // sbyte.MaxValue
number++;
Console.WriteLine(number); // Prints -128
Run Code Online (Sandbox Code Playgroud)

这里没什么好笑的 - 这只是正常的2s补充溢出.

或使用byte(未签名)

byte number = 255; // byte.MaxValue
number++;
Console.WriteLine(number); // Prints 0
Run Code Online (Sandbox Code Playgroud)