web-dev-qa-db-ja.com

2 ^ 16が「特別な」数値であるのはなぜですか?

ええ、私はこれを尋ねるのはばかげていると感じますが、Jeffの記事では インタビューの電話画面を正しく取得する で、最初に 電話の5つの基本的な質問 で述べています:

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

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

49
javamonkey79

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

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

82

Steve Yeggeの記事の全文から、

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

私はあなたが質問で引用したビットから放り出されました。候補者はそれの重要性を説明できるように思えますが、コンテキストでは、候補者は頭の上から何を知っているべきかと述べています10進数の2の変換16 です

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

現時点では2と言います32 開発者が扱う最も一般的に発生する容量です。私はそれを知らない開発者を疑っています232 これは、主キーに32ビットのintsを使用するデータベースに保存できるレコードの数をおおまかに知る必要がなかったことを意味するため、約40億(署名されている場合は最大20億まで)です。 、またはID、日付などに32ビットのintsを使用する古いコードを64ビットにリファクタリングする必要がある場合。1

216 Java shortの合計容量です。(-2の間の合計数15 と215-1)

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

プログラマが知っているとは思わない214 または218 まったく、しかし私はおそらく彼らが知っていることを期待します216 それは非常に一般的に発生する数であり、完全な数を簡単に思い出すのに十分短い数(65536)だからです。


1:Call of Duty:MW2またはiPhone Game Centerのリーダーボードを閲覧すると、2である2,147,483,647のハイスコア値を持つ不正行為者が上部に表示されることがよくあります。31-1、符号付き2の最大値32 整数。

58
Nicole

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

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

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

3
ChrisF