为什么括号会在objective-c中弄乱这个数学?

xap*_*hod 0 math objective-c ios

为什么这两个计算结果不同?这是xcode 6.1.

(lldb) print newBounds.size.height
(CGFloat) $0 = 446.5
(lldb) print newBounds.size.height * 6/4
(double) $1 = 669.75
(lldb) print newBounds.size.height * (6/4)
(double) $2 = 446.5
Run Code Online (Sandbox Code Playgroud)

Pau*_*l R 5

它只是整数数学和推广类型的通常规则.

height * 6/4 == (height * (double)6) / (double)4 == (height * 6.0) / 4.0
Run Code Online (Sandbox Code Playgroud)

然而:

height * (6/4) == height * (double)(1) == height * 1.0
Run Code Online (Sandbox Code Playgroud)

因为6/4 == 1括号在推广之前强制要求对此进行评估double.

这与C,C++,Objective-C 等中的行为相同,所以在调试器中看到它也不会太惊讶.