なぜ2 ^ 16が「特別な」数字なのですか?[閉まっている]


48

OK、私はこれを尋ねるのは愚かだと思う-しかし、ジェフの記事で:インタビュー電話画面を正しく取得し、もともと5つの重要な電話画面の質問で述べた

2 ^ 16 isで尋ねるとき、彼らはあなたを見つめているべきではありません。これは特別な番号です。彼らはそれを知っているべきです。

私は開発者\ソフトウェアエンジニア\コードモンキー\ whateverになりましたが、これに出くわしたことはないと思います。つまり、バイナリ値が基本的な操作を行うなど、確かにカウントできるなどです。しかし、この値の「特別な」ものはわかりません。


6
2のべき乗ですか?:)
マイケルK

2
@Michael 2^16.1も2のべき乗ですが、特別なものはありません。同じです2^0
右折

4
@Radek:2**0is 1、これは実際には非常に特別な数字です;)しかし、はい、通常、指数が正の整数である2のべき乗のみに関心があります。

1
さて、なぜ10 ^ 3または10 ^ 6が特別な数字なのですか?

4
これは90年代のインタビューの質問ですか?16ビットは当時特別でした
クリスS

回答:


81

(2 16 - 1)または65535または0xFFFFまたは"64K"は、2バイトの最大値です。長い間、CPUは16ビットアーキテクチャを使用し、OSも同様に16ビット操作と「ワード」に基づいていました。16ビットのコマンドと16ビットのメモリアドレスがありました。多くのシステム/コンパイラーは、まだ整数に16ビットを使用しています。

(2 16-1)は、16ビット(符号なし)整数が保持できる最大数であり、16ビットアーキテクチャがアクセスできる最大メモリアドレスであるため、特別です。


23
参考までに、これはExcelスプレッドシートの行数でもあります:)
Travis Christian

2
それはまだ制限ですか?
-JeffO

6
私は訂正します。たぶん私がずっと下にスクロールしてからしばらく経ったかもしれません。
トラビスクリスチャン

3
@Travis:最後の文にオフバイワンのエラーがあります。2 ^ 16には17ビットが必要です。
PSU

2
65535は、ipv4(およびipv6?)プロトコルで見つかった最大のポート番号でもあります。
CoatedMoose

58

Steve Yeggeの記事の本文から、

候補者はビットとバイトが何であるかを知っている必要があります。彼らはバイナリで数えることができるはずです。たとえば、2 ^ 5または2 ^ 10が何であるかを10進数で教えてくれるはずです。2 ^ 16 isで尋ねるとき、彼らはあなたを見つめているべきではありません。これは特別な番号です。彼らはそれを知っているべきです。

あなたが質問で引用したビットから私は投げ捨てられました。候補者はその重要性を説明できるように思えますが、文脈上、候補者は頭の中で2 16の 10進変換が何であるかを知っているべきだと言っています。

これの重要性は、私たち人間は、特に頭の中で(ほとんどの状況で)カウントにまだ小数を使用しているため、ストレージ、メモリ、または文字エンコーディングに使用する一般的なバイトブロックの大まかな容量を知る必要があるということです。バイトは8ビットであるため、最も一般的なのは8、16、24、32、および64です。

現時点では、開発者が扱う最も一般的な容量は2 32です。2 32が約40億(署名された場合は最大20億の最大値)であることを知らない開発者を疑っています。使用する32ビットintの主キーのため、または32ビット使用して、古いコードintなどのID、日付、のためのSは64ビットにリファクタリングする必要があります。1

2 16はJavaの総容量ですshort。(-2 15と2 15 -1の間の合計数)

開発者は、8ビットが何であるかを暗記する必要があります。多くの一般的な使用法には、ASCII文字エンコードがあります。

プログラマーが2 14や2 18を知ることはまったく期待していませんが、2 16は非常に一般的な数字であり、完全な数字を簡単に覚えるのに十分な数(65536)なので、おそらく2 16を知っていると思われます。


1:Call of Duty:MW2またはiPhone Game Centerのリーダーボードを参照すると、上部に2,147,483,647(2 31 -1、符号付き2 32整数の最大値)の高いスコア値を持つ不正行為者がよく見られます。


22
覚えておくと良いのは、2 ^ 10が約1000であり、そこから2 ^ 20が100万、2 ^ 30が10億というようになるということです。そして、これの助けを借りて、2 ^ 14が1600万であることを「見」やすくなります。したがって、2進数と10進数の間の精神的な変換をすばやく行うことができます。2 ^ 64は16 * 10 ^ 18で、これはうーん... 160億億:)
マグロブ

@マグロブ、ありがとう、良い点。少し時間がかかったので、2 ^ 64にたどり着いたことに注目する価値があります。1000は10 ^ 3で、およそ2 ^ 10です。64は4であり、あなたが得るように、60 10分の60は、6は、* 3 6が18である:10 ^ 18 *(2 ^ 4または16)...
ニコール・

2
うん。私は上記のタイプミスをしました(そしてどういうわけかそれを編集できません)2 ^ 14はもちろん1万で、100 ではありません。(結局のところ、「見る」のはそれほど簡単ではなかったと思います:)
マグロブ

+1良い答えです。より完全なコンテキストは、考えられる人、特にコンテキストとドメインの知識を持っている人を探しているからです。
すぐに_

4
ええと、ASCIIは7ビットです。;-)
ブレンダン

3

2 16を「特殊」と見なす唯一の理由は、16ビットオペレーティングシステムの単一のレジスタに格納できる最大の整数よりも1つ多いためです。

同様に、2 32および32ビットのオペレーティングシステムに同じロジックを適用できます。

それが重要な知識であるかどうかを言う前に、質問のコンテキストをもっと知る必要があります。


私はあなたが書いたもののほとんどを除外したに違いないと誓います。私が見たのは2 ^ 16と最高の整数だけでした。
ChaosPandion

6
これは不正確です。16ビットオペレーティングシステムで32ビット(またはそれ以上)のデータ型を使用することは完全に可能です。16ビット整数は、16ビットプロセッサの単一のレジスタに格納できる単純な最大値です。
チンメイカンチ

@Chinmay-ポイント取得;)
ChrisF
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.