将NSUInteger乘以CGFloat的结果是什么?

时间:2014-08-19 14:51:55

标签: ios objective-c type-conversion implicit-conversion

将NSUInteger乘以CGFloat的结果是什么?

我认为结果将是CGFloat。

- NSUInteger * CGFloat = - CGFloat

但实际上结果给了一个有趣的操纵。我应该知道什么规则?

NSArray *arr = @[ @"One", @"Two", @"Three"];
NSLog(@"__float %f", - arr.count * 0.3f);
__float 1288490240.000000

2 个答案:

答案 0 :(得分:2)

这是一个操作顺序问题。前导减号是-1 * ...的缩写。这与乘法arr.count * 0.3f具有相同的优先级。然后从左到右执行这些操作。试图使无符号整数为负数是一个坏主意。

答案 1 :(得分:1)

这里发生的是符号的改变导致无符号整数表示回绕。

如果更改浮点数的符号,则没有问题:

NSLog(@"__float %f", - 0.3f * arr.count);

在屏幕__float -0.900000

中打印