为什么我可以绕过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,它总是以零回应。
这是怎么发生的?
答
默认情况下,非常量表达式在运行时不会检查溢出,也不会引发溢出异常。
溢出检查可以通过编译器选项,环境配置或用户检查关键字启用。 检查关键字用于显式启用整型算术运算和转换的溢出检查。
这里与核对关键词巫婆你的代码抛出溢出异常: “不应该的Windows防止这种”
checked
{
int overflow = 1;
for (int i = 0; i < 31; i++)
{
overflow = overflow * 2;
Console.WriteLine(overflow);
}
}
答
当你的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
“不应该的Windows防止这种情况?”是什么让你认为Windows应该有这个责任? –