これは本当に基本的な質問ですが、「違いはない」という私の直感的な答えが正しいと完全に確信したことはありません。したがって、誰かがこれを理解する良い方法を持っているかもしれません。
Javaのプリミティブ数値タイプの1つでやりたいのがビット単位の演算だけの場合、それを符号なしの値であるかのように単純に扱うことができますか、それとも負の数を避ける必要がありますか。つまり、最上位ビットを常に0に設定します。 ?たとえば、intを符号なし32ビットの数値であるかのように使用できますか、それとも下位31ビットのみを使用する必要がありますか?
できるだけ一般的な答えを探していますが、例を挙げましょう。32個のフラグを格納したいとします。次のようなものを使用する場合、それらすべてを1つのintに格納できますか?
store = store & ~(1 << index) | (value << index)
フラグを設定index
するにvalue
は
return (store & (1 << index)) != 0
フラグを取得するにはindex
?index
または、フラグを31対1に設定した場合、このコードまたは同様のコードで何らかの問題が発生する可能性がありますか?
右シフトには>>ではなく>>>を常に使用する必要があることはわかっていますが、これが唯一の懸念事項ですか?または、最上位ビットを使用するときに、負の数の2の補数表現に関連して他の問題が発生する可能性がありますか?