class Solution {
static int findPosition(int N) {
if((N&(N-1)) != 0) return -1;
int pos = 1;
while(N!=0){
if((N&1) == 1){
return pos;
} else {
pos++;
N>>=1;
}
}
return -1; }
};
在这段代码中,如果 N 是 5,那么在 while 循环中,(5&1) == 1 满足条件,它应该返回 1,但代码返回 -1。请解释一下我到底在哪里缺少这个概念
移动
1
位比移动数字容易得多:
class Solution {
static int findPosition(int N) {
if((N & (N-1)) != 0) {
return -1;
}
for(int i = 0; i < 31; i++){
if ((N & (1 << i)) != 0){
return i;
}
}
return -1;
}
}
如果 N 是 5,那么在 while 循环中,(5&1) == 1 满足条件,它应该返回 1,但代码返回 -1
这是您第一次检查造成的:
if((N&(N-1)) != 0) return -1;
此代码检查您的数字是否只有一位设置为
1
,但二进制数字 5
是 0b101
,其中有两位设置为 1
。这就是为什么你永远不会达到你的while
循环