あなたの質問は「なぜJavaはunsigned intをサポートしないのか」ということです。
そしてあなたの質問への私の答えは、Javaがそのプリミティブ型のすべてを望んでいるということです:byte、char、short、int、およびlongは、アセンブリとまったく同じように、それぞれ、byte、word、dword、およびqwordとして扱われるべきであり、Java演算子は署名されていますそれのすべての操作が以外のプリミティブ型だ文字を、だけで文字彼らは、16ビットの符号なしのみです。
そう静的メソッドがあると仮定し、符号なしの動作も、32ビットおよび64ビットのため。
署名されていない操作のために静的メソッドを呼び出すことができる最終クラスが必要です。
この最終クラスを作成し、好きな名前を付けて、静的メソッドを実装できます。
静的メソッドの実装方法がわからない場合は、このリンクが役立つ場合があります。
私の意見では、JavaはC ++ にまったく似ていません。Javaが符号なしの型も演算子のオーバーロードもサポートしていない場合、JavaはC ++とCの両方から完全に異なる言語として扱う必要があると思います。
ちなみに言語名も全然違います。
したがって、JavaでCと同様のコードを入力することはお勧めしません。また、C ++と同様のコードを入力することもお勧めしません。Javaでは、次にC ++で実行したいことを実行できないためです。つまり、コードはC ++のようにまったく機能しなくなり、私にとっては、途中でスタイルを変更するために、そのようなコードを作成することはできません。
署名付きの操作にも静的メソッドを作成して使用することをお勧めします。コードで署名付きの操作のみが必要で、それが演算子のみを使用してください。
また、short、int、およびlongプリミティブ型の使用を避け、代わりにword、dword、およびqwordをそれぞれ使用することをお勧めします。演算子を使用する代わりに、符号なし演算および/または符号付き演算の静的メソッドを呼び出します。
符号付き操作のみを行い、コード内でのみ演算子を使用する場合は、これらのプリミティブ型short、int、およびlongを使用しても問題ありません。
実際にはword、dword、qwordは言語には存在しませんが、それぞれに対して新しいクラスを作成でき、それぞれの実装は非常に簡単です。
クラスwordはプリミティブ型shortのみを保持し、クラスdwordはプリミティブ型intのみを保持し、クラスqwordはプリミティブ型longのみを保持します。これで、すべての符号なしメソッドと符号付きメソッドを静的または非選択として、各クラスに実装できます。つまり、ワードクラスに意味のある名前を付けることにより、符号なしと符号付きのすべての16ビット演算、符号なしと符号付きの両方の32ビット演算すべて上の意味の名前を与えることによって署名DWORDクラスと符号なしと上の名前の意味を与えることにより、署名の両方のすべての64ビット演算QWORDクラスを。
あなたは、各メソッドのためにあまりにも多くの異なる名前を与えて気に入らない場合は、常にJavaがなかったことを読み取ることが、Javaでのオーバーロードの良いを使用することができない、あまりにもそれを取り除きます!
8ビットの符号付き演算の演算子ではなくメソッド、および演算子がまったくない8ビットの符号なし演算のメソッドが必要な場合は、Byteクラスを作成できます(最初の文字「B」が大文字であるため、これはプリミティブ型byte)とこのクラスのメソッドを実装します。
値渡しと参照渡しについて:
私が間違っていない場合、C#のように、プリミティブオブジェクトは値によって自然に渡されますが、クラスオブジェクトは自然に参照によって渡されるため、タイプByte、word、dword、およびqwordのオブジェクトは、値ではなく参照によって渡されますデフォルトでは。JavaにC#のように構造体オブジェクトがあったらいいので、すべてのByte、word、dword、qwordを実装して、クラスの代わりに構造体にすることができますなので、デフォルトでは、プリミティブ型のようなC#の構造体オブジェクトのように、デフォルトでは参照ではなく値で渡されましたが、デフォルトでは参照ではなく値で渡されますが、そのJavaはC#よりも悪いため、それを処理するために、デフォルトでは値ではなく参照によって渡されるクラスとインターフェースのみがあります。したがって、JavaやC#の他のクラスオブジェクトと同様に、参照ではなく値でByte、word、dword、およびqwordオブジェクトを渡す場合は、コピーコンストラクターを使用するだけでよいのです。
それが私が考えられる唯一の解決策です。基本型をword、dword、qwordにtypedefできればいいのですが、Javaはtypedefもまったく使用しません。Cのtypedefに相当するusingをサポートするC#とは異なります。
出力について:
同じビットシーケンスの場合、さまざまな方法でそれらを印刷できます。2進数、10進数(C printfでの%uの意味など)、8進数(C printfでの%oの意味など)、16進数(などC printfでの%xの意味)および整数として(C printfでの%dの意味と同様)。
Cのprintfは関数にパラメーターとして渡される変数の型を認識しないため、関数の最初のパラメーターに渡されるchar *オブジェクトからのみ、printfは各変数の型を認識します。
したがって、Byte、word、dword、およびqwordの各クラスでは、クラスのプリミティブ型が署名されていても、printメソッドを実装してprintfの機能を取得できます。数字を出力に出力するための論理演算とシフト演算。
残念ながら、私があなたに与えたリンクはこれらの印刷方法を実装する方法を示していませんが、これらの印刷方法を実装するために必要なアルゴリズムをググることができると私は確信しています。
それが私があなたの質問に答えてあなたに提案できるすべてです。