CInt 函数的奇怪行为:抛出 System.OverflowException

问题描述 投票:0回答:1

整数数据类型的最大值为 2'147'483'647。 当我运行这段代码时:

Dim t As Integer = 4094
Dim sz as Integer
sz = CInt((t / 2) * 1024 * 1024)
sz = CInt(t * 1024 * 1024 / 2)

第 3 行执行良好,但第 4 行抛出 System.OverflowException: '算术运算导致溢出。' 尽管事实上,在这两种情况下算术表达式都会产生相同的值:2'146'435'072,即小于整数数据类型的最大值。 这要怎么解释呢?

vb.net
1个回答
0
投票

这不仅仅是结果:它是一路走来的每一步

有符号整数的最大值略高于 20 亿。为了计算最后一行的结果,代码将 4096 (

t
) 乘以 1024,两次,before 除以二。该表达式的结果“太大”,无法用整数表示。您可能需要一个 Long
    

© www.soinside.com 2019 - 2024. All rights reserved.