私はマスクを作成し、次のようなショートでより高いビットを設定しています:
enum FLAGS {FLAG1, FLAG2, FLAG3, FLAG4, FLAG5, FLAG6};
public static void setFlag(short len, FLAGS flag) {
short mask = 1 << (Short.SIZE - flag.ordinal() - 1);
len |= mask;
}
私は値を印刷しました:
len: 0000001111111100
mask : 1000000000000000
after OR'ing with mask: 11111111111111111000001111111100
short でビット操作を行うと、オーバーフローを避けるために int にアップグレードされることは理解していますが、なぜすべての上位ビットが設定されるのでしょうか? 変なキャストなしで最初の 6 ビットのいずれかを設定するにはどうすればよいですか?