3

NSUInteger の値が 2^32 ではなく 2^32 - 1 になるのはなぜですか? この事実と nan 値の必要性との間に関係はありますか? これはとても紛らわしいです。

4

5 に答える 5

8

指で10まで数えます。本当 :)

10 まで数える標準的な方法は1,2,3,..10(各指の順序を数える) です。しかし、「指0本」はどうでしょうか。

通常、これは手を背中の後ろに置くことで表されますが、の情報がシステムに追加されます: 手が前にある (存在する) か、後ろにある (欠落している) か?

この場合、手を後ろに置くことnilは、NSNumber変数に代入することと同じです。ただし、この余分な状態を持たないNSUIntegerネイティブの整数型を表し、有用であるためには0 をエンコードする必要があります。

指で値 0 をエンコードするための鍵は、0,1,2..9代わりに単純に数えることです。同じ数の指 (または情報のビット) を利用でき0ますが、値を持たないことを犠牲にして、有用なものを説明できるようになりました10(まだ 10 本の指がありますが、10 番目の指は値を表すだけです9)。2^n-1これは、符号なし整数の最大値が であり、 ではないのと同じ理由です。これにより、最大効率でエンコード2^nできます。0

現在、NaNは典型的な整数値ではなく、浮動小数点エンコーディングに由来します -floatまたはを考えてCGFloatください。そのような一般的なエンコーディングの 1 つはIEEE 754です。

コンピューティングでは、数値ではないことを表す NaN は、特に浮動小数点計算で、未定義または表現不可能な値を表す数値データ型の値です。

于 2012-12-03T20:01:29.397 に答える
2

これは、32 ビットの符号なし整数変数が保持できる最大値です。これに 1 を加えると、ゼロに戻ります。

その理由は、最小の符号なし数値が 1 ではなく 0 であるためです。考えてみてください。小数点以下 4 桁に収まる最大の数は 10000 ではなく 9999 です。これは 10^4-1 です。

于 2012-12-03T19:52:40.687 に答える
2

ビットは0から数えるので2^32-1。2^32 - 2^0 と考えてください。

于 2012-12-03T19:50:46.447 に答える
1

2^32 を 4 バイトに格納することはできませんが、1 を引くと収まります (結果は 0xffffffff)。

于 2012-12-03T19:51:31.940 に答える
0

車の走行距離計が最大 999999 mi/km (6 桁と仮定) を示すのとまったく同じ理由です。10^6 の可能な値がありますが、10^6 自体を表示することはできず、0 から 10^6-1 までを表示できます。

于 2012-12-04T10:15:58.870 に答える