乘以LongInts。表达式:Int64Var:= LongIntVar * LongIntVar

时间:2013-03-14 03:23:30

标签: delphi pascal

我一直认为它是Pascal设计理念的一部分,它在决定用于操作的格式/精度时,会查看表达式的右侧和左侧。所以,不像C表达式那样,

Float_Var = 1/3
对于Float_Var,

的值为0.0,Pascal总是得到正确的结果。 :)

所以当我将两个LongInts(32位)乘以Int64结果并发现我得到异常结果时,我有点意外。我必须得到所有C喜欢和使用,

Int64_Var := Int64(LongIntVar1) * LongIntVar2

使其正常工作。 (顺便说一句。这是在Delphi下,测试了各种版本,但都是win32)。

我只是想知道这是否是Delphi / Pascal的例外情况?或者是否有其他例子,其中通常的Pascal方式,使用表达式两边的类型来决定操作的执行方式,并不成立。

2 个答案:

答案 0 :(得分:3)

如果“双方”意味着它在用于确定表达式类型的赋值中查看目标变量的类型,那么不,从来就不是这种情况。在这方面,Delphi的工作方式与其他主流编译器类似 - 也就是说,表达式的类型由内而外决定。

答案 1 :(得分:2)

  

我一直认为这是设计理念的一部分   帕斯卡,它看着左右两边   决定使用什么格式/精度时的表达式   进行手术。

这是不正确的。表达式分配目标不会影响表达式的评估。

原因

Float_Var = 1/3;

在C / C ++中求值为0是/运算符过载。它可以表示整数除法或浮点除法。如果其中一个参数是浮点,那么运算符是浮点除法,否则,就像这里一样,它是整数除法。

在Delphi中,/运算符不会过载。它总是浮点除法。这就是为什么这段代码会产生编译错误:

Int_Var := 1/3;