关于类型转换的问题

时间:2011-08-10 18:49:31

标签: objective-c

这是我的代码:

float result;
result = 1.0 + 1/2;
NSLog(@"Result = %f", result);

为什么结果1.000000而不是1.5?

的值

由于

3 个答案:

答案 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;

真的:

  1. (float)result = (double)1.0 + (int)((int)1 / (int)2);
  2. (float)result = (double)1.0 + (int)0;
  3. (float)result = (double)1.0 + (double)0.0;
  4. (float)result = (double)1.0;
  5. (float)result = (float)1.0;
  6. 你想要的是这个表达式:

    float result = 1.0f + 1.0f/2.0f;
    

    然后你最终得到了这个评价:

    1. (float)result = (float)1.0 + (float)((float)1.0 / (float)2);
    2. (float)result = (float)1.0 + (float)0.5;
    3. (float)result = (float)1.5;
    4. 对CPU的工作少得多,你得到了你期望的。如果使用实际变量而不是常量,则速度提升才会显着。实际上,您的原始语句和我修改后的语句将由编译器优化为:

      • (float)result = (float)1;
      • (float)result = (float)1.5;?

答案 2 :(得分:0)

替换

result = 1.0 + 1/2;

result = 1.0 + 1.0/2.0;