这是我的代码:
float result;
result = 1.0 + 1/2;
NSLog(@"Result = %f", result);
为什么结果1.000000而不是1.5?
的值由于
答案 0 :(得分:3)
因为1/2
为0,因为这是用整数数学完成的。
尝试
result = 1.0 + 1.0/2
答案 1 :(得分:3)
这就是C编译器如何滚动。 Objective-C是C之上的超薄层,因此了解C的工作原理是好的。
根据运算符优先级评估所有表达式,直到最后一刻才会提升或降级类型。这就是C可以确保尽可能正确的结果。
所以评估的步骤是:
float result = 1.0 + 1/2;
真的:
(float)result = (double)1.0 + (int)((int)1 / (int)2);
(float)result = (double)1.0 + (int)0;
(float)result = (double)1.0 + (double)0.0;
(float)result = (double)1.0;
(float)result = (float)1.0;
你想要的是这个表达式:
float result = 1.0f + 1.0f/2.0f;
然后你最终得到了这个评价:
(float)result = (float)1.0 + (float)((float)1.0 / (float)2);
(float)result = (float)1.0 + (float)0.5;
(float)result = (float)1.5;
对CPU的工作少得多,你得到了你期望的。如果使用实际变量而不是常量,则速度提升才会显着。实际上,您的原始语句和我修改后的语句将由编译器优化为:
(float)result = (float)1;
(float)result = (float)1.5;?
答案 2 :(得分:0)
替换
result = 1.0 + 1/2;
与
result = 1.0 + 1.0/2.0;