NSNumber允许的最高整数是什么?我在这些论坛的其他地方看到了答案,所以我在这里非常困惑。
int miles = 35000;
vehicle.mileage = [NSNumber numberWithInt:miles];
NSLog(@"int value = %d", miles);
NSLog(@"mileage = %@", vehicle.mileage);产出如下:
int value = 35000
mileage = -30536我一定是错过了一些可怕的容易,但谁能解释给我为什么这是不正确的工作?
更新:在深入研究之后,被正确地设置为35000,但是当我通过NSLog(@%@,vehicle.mileage)显示它时,它的输出是错误的。当它停止工作时,我还没有找到“魔力”值,因为到目前为止,它对高达30,000的值起作用。
发布于 2012-12-12 01:00:11
NSNumber只是一个包装器,所以当包装的原语类型出现溢出时,它就会溢出。
因此,如果使用numberWithInt,所允许的最大数量是INT_MAX (在Lims.h中定义),如果使用numberWithFloat,则允许的最大值是FLOAT_MAX,依此类推。
因此,在这种情况下,您不会溢出,我怀疑INT_MAX是否会如此低。
发布于 2012-12-12 01:25:02
概述 NSNumber是NSValue的子类,它提供任何C标量(数值)类型的值。它定义了一组方法,专门用于将值设置和访问为有符号或无符号字符、短int、int、长int、长int、float或double或BOOL。(请注意,number对象不一定保留使用它们创建的类型。)它还定义了一个比较方法来确定两个NSNumber对象的顺序。
所以NSNumber和它包装的一样大。对于您意想不到的结果,您可以查看@sjs中的注释。
发布于 2012-12-12 01:11:15
+numberWithInt:将该值解释为签名的int。里程数永远不会为负,所以我建议使用[NSNumber numberWithUnsignedInt:]
https://stackoverflow.com/questions/13831061
复制相似问题