相关问题:Java On AND'ing a short with an short,它升级为 int 并返回奇怪的值
我有一个短的(2 字节)空间,应该用于设置 16 个标志,每个位一个。我必须编写一个 API 来设置/检查/清除第 n 位(n = 0、1..15)。问题出现在 MSBit 的情况下。
我是这样设置的:
short setBit(short flags, int n) {
flags |= (1 << n);
return flags;
}
当 n 为15
我设置符号位时,结果值为 : 1111111111111111111111111111111111111111111111111000000000000000
。
我试图通过以下方式从中获取低 16 位:
flags &= 0xffff;
我得到了与预期相同的答案,因为符号位保持不变。如何设置最高位并且不最终转换类型并让符号位扩展/填充其余空间?(这些标志将被写入磁盘)。