加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 按位最重要的设置位

发布时间:2020-12-15 02:55:04 所属栏目:Java 来源:网络整理
导读:我想找到设置为1的最重要的位.我已经尝试了所有可能的方式来自 ORing从1到31的所有位,它不起作用. 就像1000000我想拥有7. 解决方法 如果你坚持直接使用按位运算符,你可以尝试这样的事情: private int mostSignificantBit(int myInt){ int mask = 1 31; for(
我想找到设置为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).如果您愿意,可以调整.另请注意,我使用了无符号右运算符而不是带符号的右移位运算符.这是因为这里的意图是处理原始位而不是它们的带符号解释,但是在这种情况下无关紧要,因为所有负值将在转换发生之前在循环的第一次迭代中终止.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读