関連する質問: Java short と short の AND を実行すると、int にアップグレードされ、奇妙な値が返されます
各ビットに 1 つずつ、16 個のフラグを設定するために使用する必要がある短い (2 バイト) スペースがあります。n 番目のビット (n = 0, 1..15) を設定/チェック/クリアする API を作成する必要があります。MSBit の場合に問題が発生します。
私は次のように設定しています:
short setBit(short flags, int n) {
flags |= (1 << n);
return flags;
}
n の場合15
、符号ビットを設定すると、結果の値は : になります1111111111111111111111111111111111111111111111111000000000000000
。
実行して、これから下位16ビットをフェッチしようとしました:
flags &= 0xffff;
符号ビットが同じままであるため、期待されるのと同じ答えが得られます。最上位ビットを設定して、型を変換したり、符号ビットを拡張したり、残りのスペースを埋めたりしないようにするにはどうすればよいですか? (これらのフラグはディスクに書き込まれます)。