我正在创建一个掩码并设置更高的位,如下所示:
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
我知道当我们对短裤进行位操作时,它们会被升级为 int 以避免溢出,但是为什么要设置所有更高的位呢?我怎样才能简单地设置前 6 位中的任何一个而没有任何有趣的转换?