【发布时间】:2013-09-30 18:27:03
【问题描述】:
我正在创建一个掩码并设置更高的位,如下所示:
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 位中的任何一个而不进行任何有趣的转换?
【问题讨论】:
-
除了这个问题,你应该考虑改用
BitSet。
标签: java type-conversion bit-manipulation short