为什么我可以绕过c中的int限制#

问题描述:

我怎样才能使整数溢出? 是否有可能在C#中捕获溢出异常?为什么我可以绕过c中的int限制#

的C#代码我使用:

int overflow = 1; 

for (int i = 0; i < 31; i++) { 
    overflow = overflow * 2; 
    Console.WriteLine(overflow); 
} 

该计划将继续正常计数,当我通过一个(甚至多次)提高整数值:

for (int j = 0; j < 10; j++) { 
    overflow++; 
    Console.WriteLine(overflow); 
} 

但我当继续乘以2,它总是以零回应。

这是怎么发生的?

+1

“不应该的Windows防止这种情况?”是什么让你认为Windows应该有这个责任? –

默认情况下,非常量表达式在运行时不会检查溢出,也不会引发溢出异常。

溢出检查可以通过编译器选项,环境配置或用户检查关键字启用。 检查关键字用于显式启用整型算术运算和转换的溢出检查。

这里与核对关键词巫婆你的代码抛出溢出异常: “不应该的Windows防止这种”

checked 
{ 
    int overflow = 1; 

    for (int i = 0; i < 31; i++) 
    { 
     overflow = overflow * 2; 
     Console.WriteLine(overflow); 
    } 
} 

checked (c# Reference)

当你的INT超过上限值抛出一个错误时有点作用:

溢出:-2147483648

int.MaxValue:2147483647

如果你想获得一个int(或int32)超过2147483647,您应该可能使用int64: https://msdn.microsoft.com/en-us/library/system.int64(v=vs.110).aspx

或biginteger关于此事

https://msdn.microsoft.com/en-us/library/system.numerics.biginteger(v=vs.110).aspx