NSUInteger和NaN的价值?

时间:2012-12-03 19:49:01

标签: objective-c cocoa nan foundation nsuinteger

为什么NSUInteger的值为2 ^ 32 - 1而不是2 ^ 32?这个事实与纳米值的需要之间是否存在关系?这太令人困惑了。

5 个答案:

答案 0 :(得分:8)

用手指数到10。真的:)

计算到10的标准方法是1,2,3,..10(计算每个手指的ordinality)。然而,“0指”呢?

通常情况下,这可能表示将手放在背后,但是会将另一条信息添加到系统中:您的手在前面(现在)还是在后面(丢失)?

在这种情况下,将双手放在背后相当于将nil分配给NSNumber变量。但是,NSUInteger表示本机整数类型,具有此额外状态,而仍必须编码0 才有用。

对手指值0进行编码的关键是简单地计算0,1,2..9。可以使用相同数量的手指(或信息位),但现在可以考虑有用的0,但代价是没有10值(仍然有10个手指,但是第10个手指仅代表值9)。这与无符号整数的最大值2^n-1而不是2^n的原因相同:它允许0以最高效率进行编码。

现在, NaN 不是典型的整数值,而是来自浮点编码 - 想到float或{{1 }}。一个这样的常见编码是IEEE 754

  

在计算中,NaN(不是数字)是表示未定义或不可表示的值的数值数据类型值,尤其是浮点计算中的 ..

答案 1 :(得分:2)

2 ^ 32-1因为计数从0开始计数。如果它更容易被认为是2 ^ 32 - 2 ^ 0。

答案 2 :(得分:2)

这是32位无符号整数变量可以容纳的最大值。添加一个,它将回绕到零。

原因是最小的无符号数是零,而不是一。想一想:你可以容纳四位小数的最大数字是9999,而不是10000.那是10 ^ 4-1。

答案 3 :(得分:1)

你不能以4个字节存储2 ^ 32,但是如果你减去一个那么它就适合(结果是0xffffffff)

答案 4 :(得分:0)

为什么你车中的里程表显示最大值为999999英里/公里(假设为6位数)的原因完全相同 - 虽然有10 ^ 6个可能值但它不能显示10 ^ 6本身但是0到10 ^ 6 -1