我刚刚意识到,如果我在模拟器上的iPhone软件开发工具包中混合了整数和浮点数,我就会在简单的数学上得到错误。两个例子:
float testVal1 = 10 + 5/10;
//evaluates to 10 instead of 10.5 unless I use explicit 10.0f..
// Problem Code mixed float int
NSUInteger jvalue = 2312345;
NSInteger testVal2 = (jvalue - 2512345); // evaluates correctly
float testVal3 = (jvalue - 2512345); // fails with some huge bogus value
我认为在混合模式表达式中,它会转换为浮点值。在使用浮点数时,看起来要么全有要么全无,没有混合
这里出了什么问题?
发布于 2009-03-31 16:23:32
没有任何错误;这就是操作的工作方式。看看你的例子:
float testVal1 = 10 + 5/10; //evaluates to 10
这里的操作顺序如下:
要按您希望的方式工作,除法操作数中必须至少有一个是浮点数。现在,结果将更像这样:
floating-point literal
发布于 2009-03-31 16:23:54
这与iPhone或模拟器没有任何关系,它与Objective-C和C如何执行算术有关。编译器将操作数解释为5/10作为整数,根据定义,整数除法不能得到小数结果。因此,10 + 5/10 == 10 +0 == 10。您可以尝试:
float testVal1 = 10.0f + 5.0f/10.0f;
发布于 2009-03-31 16:24:42
在像5 / 10
这样的子表达式中,默认的数据类型是integer,直到其中一个操作数另有说明。然而,由于整数除法,(5 / 10) = 0
。
在表达式编辑器( expression NSInteger testVal2 = (jvalue - 2512345);
)中,子表达式的默认类型是无符号整数;负结果会导致下溢和假值。
https://stackoverflow.com/questions/701832
复制相似问题