delphi – 为什么“i:= i 1”不给整数和较大类型的范围检查错误?

前端之家收集整理的这篇文章主要介绍了delphi – 为什么“i:= i 1”不给整数和较大类型的范围检查错误?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
考虑:
{$R+}
i:= 1;
While i > 0 do
  i:= i + 1;
ShowMessage(IntToStr(i));

如果我声明我是字节,Word,Shortint或TinyInt我得到一个范围检查错误,如预期.
如果我将我声明为LongWord,Cardinal,Integer,LongInt或Int64,那么它将通过while循环,并显示负值或0值,当我通过上限时,我得到的值.

Delphi 7不支持32位和64位数字的范围检查?

解决方法

操作i 1实际上不产生范围检查错误.分配操作.

Delphi将常量’1’评估为整数,因此右侧将产生一个Int64或Integer(i的类型和整数)中的较大的结果.

如果我们扩展线,我们得到以下

temp := i + 1 
i := temp

temp将为32位或64位,如果遇到上限,将会溢出.当我们做任务时,我们有一个完全有效的32或64位值,所以如果我是32bits或更多,没有范围检查失败的可能性.

如果我小于32位,则如果温度太大而不适合,则会提高范围检查.

对于i> = 32bits,您可以像这样捕获溢出错误

{$R+,Q+}
...

猜你在找的Delphi相关文章