java – 按位最重要的设置位
发布时间:2020-05-25 00:56:32 所属栏目:Java 来源:互联网
导读:我想找到设置为1的最重要的位.我已经尝试了所有可能的方式来自 ORing从1到31的所有位,它不起作用. 就像1000000我想拥有7. 如果你坚持直接使用按位运算符,你可以尝试这样的事情: private int mostSignificantBit(int myInt){ int mask = 1 31; for(int bitInd
|
我想找到设置为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).如果您愿意,可以调整.另请注意,我使用了无符号右运算符而不是带符号的右移位运算符.这是因为这里的意图是处理原始位而不是它们的带符号解释,但是在这种情况下无关紧要,因为所有负值将在转换发生之前在循环的第一次迭代中终止. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
