You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java DSA问题:查找设置位位置的代码为何在N=5时返回-1?

问题分析

首先看你写的代码,开头有个关键的前置判断:

if((N&(N-1)) != 0) return -1;

这行代码的作用是检查输入的N是不是只有一个二进制位被置1(也就是N是2的整数次幂)。

当N=5时,二进制是101,N-1是4(二进制100),两者按位与的结果是101 & 100 = 100(也就是十进制的4),显然不等于0,所以这个if条件成立,直接返回-1,根本不会进入后面的while循环——这就是你误以为会返回1但实际返回-1的原因。

你的误区在于没注意到这个前置判断的逻辑:原来的代码设计是只处理那些二进制中只有一个1的数,比如2(10)、4(100)、8(1000)这类,这类数通过N&(N-1)会得到0,才会进入while循环去查找那个唯一的1的位置;而像5这种有多个1的数,直接被前置判断过滤掉,返回-1。

如果你的需求是找到二进制中最低位的1的位置(不管有几个1),那去掉这个前置判断就行,此时N=5会进入while循环,(5&1)=1,返回pos=1。

内容的提问来源于stack exchange,提问作者P30932230

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 12:48:23