それはすべてハードウェアから来ています。
バイトは、ほとんどのハードウェアでメモリの最小アドレス単位です。
今述べたすべての型は、複数のバイトから構築されています。
1バイトは8ビットです。これにより、8つのブール値を表現できますが、一度に1つだけ検索することはできません。1番地、8番地すべてに対応しています。
以前は単純でしたが、8ビットバスから16、32、そして64ビットバスに移行しました。
つまり、バイトレベルでアドレス指定することはできますが、隣接するバイトを取得せずにメモリから1バイトを取得することはできません。
このハードウェアに直面して、言語設計者は、ハードウェアに適合するタイプを選択できるタイプを選択できるようにしました。
特にハードウェア上で実行することを目的とした言語では、このような詳細を抽象化できると主張することができます。これにより、パフォーマンスの問題が隠されますが、正しいかもしれません。そんなことは起こらなかった。
Javaは実際にこれを試みます。バイトは自動的にIntsに昇格されます。深刻なビットシフト作業を最初にしようとするときに、あなたを夢中にさせる事実。
では、なぜうまく機能しなかったのでしょうか?
当時のJavaの大きなセールスポイントは、既知の優れたCアルゴリズムを使用して座ってJavaで入力し、わずかな調整を加えるだけで機能することでした。Cはハードウェアに非常に近いです。
そのままにして、整数型からサイズを抽象化することは、うまくいきませんでした。
だから彼らは持つことができた。彼らはしませんでした。
おそらくプログラマーは、誰かが特定のサイズよりも大きな数を使用できるようにしたくないでしょう。これにより、制限することができます。
これは有効な考え方です。これを行う方法があります。クランプ機能 1について。言語は、任意の境界をその型に焼き込むことができます。また、コンパイル時にこれらの境界がわかっている場合、それらの数値の格納方法を最適化できます。
Javaはまさにその言語ではありません。