delphi – 为什么“i:= i 1”不给整数和较大类型的范围检查错误
发布时间:2020-12-15 10:08:04 所属栏目:大数据 来源:网络整理
导读:考虑: {$R+}i:= 1;While i 0 do i:= i + 1;ShowMessage(IntToStr(i)); 如果我声明我是字节,Word,Shortint或TinyInt我得到一个范围检查错误,如预期. 如果我将我声明为LongWord,Cardinal,Integer,LongInt或Int64,那么它将通过while循环,并显示负值或0值,当我
考虑:
{$R+} i:= 1; While i > 0 do i:= i + 1; ShowMessage(IntToStr(i)); 如果我声明我是字节,Word,Shortint或TinyInt我得到一个范围检查错误,如预期. 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+} ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |