java – 按位最重要的设置位

前端之家收集整理的这篇文章主要介绍了java – 按位最重要的设置位前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想找到设置为1的最重要的位.我已经尝试了所有可能的方式来自& ORing从1到31的所有位,它不起作用.

就像1000000我想拥有7.

解决方法

如果你坚持直接使用按位运算符,你可以尝试这样的事情:
private int mostSignificantBit(int myInt){
  int mask = 1 << 31;
  for(int bitIndex = 31; bitIndex >= 0; bitIndex--){
    if((myInt & mask) != 0){
      return bitIndex;
    }
    mask >>>= 1;
  }
  return -1;
}

我们将掩模初始化为1 <<< 31因为它代表1然后是31 0.我们使用该值来测试索引31(第32个点)是否为1.当我们和myInt使用此值时,除非在myInt中设置相应的位,否则我们得到0.如果是这种情况,我们返回bitIndex.如果没有,那么我们将掩码向右移动1并再试一次.我们重复,直到我们用完要移位的地方,在这种情况下,它意味着没有设置任何位(可能你想在这里抛出异常而不是返回-1). 请注意,这将返回值0为1和6为64(二进制为1000000).如果您愿意,可以调整.另请注意,我使用了无符号右运算符而不是带符号的右移位运算符.这是因为这里的意图是处理原始位而不是它们的带符号解释,但是在这种情况下无关紧要,因为所有负值将在转换发生之前在循环的第一次迭代中终止.

猜你在找的Java相关文章