nan
值,我知道如何处理它,但是当我试图解释nan到底意味着什么时,我意识到我自己也不确定。还有一些类似的奇怪值,我想要一些澄清。
inf
显然表示无穷大,但是当你达到最大浮点值时会出现吗?
nan
这到底意味着什么,什么时候会出现这个值?
nil
我认为我知道这一个。未分配对象的实例。我认为它也应该属于这个列表。
null
我不确定这一个,但我认为它和nil相似?nan
值,我知道如何处理它,但是当我试图解释nan到底意味着什么时,我意识到我自己也不确定。还有一些类似的奇怪值,我想要一些澄清。
inf
显然表示无穷大,但是当你达到最大浮点值时会出现吗?
nan
这到底意味着什么,什么时候会出现这个值?
nil
我认为我知道这一个。未分配对象的实例。我认为它也应该属于这个列表。
null
我不确定这一个,但我认为它和nil相似?
inf
显然代表正无穷,但在达到最大浮点值时是否会出现?
这并不是 ObjC 的一部分,除非 NSNumber
在持有无限值时使用此作为 -description
。
NSNumber
内部的实际值是一个 double
,由 C 定义 - 实际上,定义在很大程度上取决于平台。但是,在大多数平台上,它是一个 IEEE-754 binary64
。 IEEE 754 标准定义了一个仿射扩展实数线,其中包括正负无穷大以及有限值。它还精确定义了有限计算如何溢出到无限大,以及您的代码如何控制它。但是,总的来说,如果计算超过了 double
的最大有限值,则得到正无穷。
nan
这具体意味着什么,这个值什么时候会出现?
这同样主要涉及 C 和 IEEE-754,而不是 ObjC(再次除了 NSNumber
的 -description
)。维基百科有一个关于 NaN
的好页面,但简而言之,它表示“非数字”,用于没有明智的值甚至不是无穷大的情况(或者其间存在多个不同的值),比如 0/0
。
nil
我认为我知道这个。未分配对象的实例。我认为它仍然属于这个列表。
nil
不是一个对象的实例,它是一个空指针,在没有实例需要指向时使用。它基本上相当于(id)0
或(NSObject *)0
。
但是"未分配对象"也不是一个对象,不存在,因此……在第一次谈论这样的事情有任何意义的范围内,我想你可以说nil
是它的指针。
null
我对这个不确定,但我认为它与nil
类似?
+ [NSNull null]
值用作实际存在但代表什么都没有的占位符对象,放在无法没有任何东西的地方(例如,在NSArray
中)。
如果尝试将空指针打印为C字符串(例如,NSLog(@"%s",0)
),则还可能看到null
。 但是,任何出现此代码的代码实际上都不是合法的C或ObjC代码。
此外,人们经常混淆null
和NULL
,后者表示任何空指针。
因此,当您拥有id
,NSObject *
,NSSomeOtherClass *
等指针,并且没有任何东西需要指向时,请使用nil
。当您拥有对非ObjC值的指针,例如int *
,并且没有任何东西需要指向时,请使用NULL
。当您想将空指针放入集合中时,请使用null
。
NaN代表“不是一个数字”。
当浮点运算没有合理的结果时,会产生NaN。例如,没有一个浮点数可以作为对-1的平方根的良好近似值。
NaN可以用于各种用途。软件可以将浮点对象初始化为信号NaN,这样在未给其赋值之前使用它会导致陷阱。
静默NaN可以被忽略,以允许大型计算完成,并在稍后修复或删除NaN(大多数操作传播NaN:如果你将NaN和数字相加,则结果为NaN)。