Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有符号整数溢出行为_C#_Integer Overflow - Fatal编程技术网

C# 有符号整数溢出行为

C# 有符号整数溢出行为,c#,integer-overflow,C#,Integer Overflow,当添加两个理论结果大于Int32.MaxValue的正Int32值时,我可以指望溢出值始终为负吗 我的意思是作为一种检查溢出的方法,而不使用检查过的上下文和异常处理,如这里所建议的:,但是这种行为是否被使用了呢 到目前为止,我读到的是C定义行为中的有符号整数溢出,与C/C++相比,Int32是两个补充,因此我非常感谢比我更了解这个主题的人来验证这一点 更新 引自链接1: 检测2的补码和溢出的规则很简单: 如果两个正数之和产生负结果,则该和溢出。 如果两个负数之和产生正结果,则该和溢出。 否则,这

当添加两个理论结果大于Int32.MaxValue的正Int32值时,我可以指望溢出值始终为负吗

我的意思是作为一种检查溢出的方法,而不使用检查过的上下文和异常处理,如这里所建议的:,但是这种行为是否被使用了呢

到目前为止,我读到的是C定义行为中的有符号整数溢出,与C/C++相比,Int32是两个补充,因此我非常感谢比我更了解这个主题的人来验证这一点

更新 引自链接1:

检测2的补码和溢出的规则很简单:

如果两个正数之和产生负结果,则该和溢出。 如果两个负数之和产生正结果,则该和溢出。 否则,这笔钱就没有溢出。 第2条

不正确

如果两个负数之和产生正结果,则该和溢出。 反例:

  int a = int.MinValue;
  int b = int.MinValue;

  unchecked {
    // 0
    Console.Write(a + b);
  }
然而,这条规则可以简单地修改

如果两个负数之和产生非负数结果,则该和已溢出。 至于规则1

如果两个正数之和产生负结果,则该和溢出。 这是正确的

不,你不能

您已经谈到了checked上下文,您知道溢出会导致抛出异常。然而,您似乎认为缺少checked关键字表明您处于未检查的上下文中。事实并非如此。当未指定选中或未选中时,默认上下文是可配置的,在共享相同源文件的多个项目中可以不同,甚至在同一项目的不同配置之间也可以不同


如果希望整型溢出换行,请显式使用unchecked关键字。

我知道。虽然这可能值得向其他人指出,但我认为我对这个问题的措辞意味着我想在未经检查的情况下使用它。否则,我将不会得到overflown值,而是OverflowException。@ArgusMagnus您对问题的措辞向我暗示,您的意思是在默认的隐式未检查上下文中使用它,这是有风险的。我的答案的要点是将其变成一个显式的未检查上下文。