我有一个像找到最低设置位
10000
01000
00100
5个数字如果只有一个位是在我计算我没有问题。
但如果2位上然后我想只选择钻头上的第一例如
10010
我想将其作为2代替数18
是否有任何位运算我可以用这样的手段吗?
我有一个像找到最低设置位
10000
01000
00100
5个数字如果只有一个位是在我计算我没有问题。
但如果2位上然后我想只选择钻头上的第一例如
10010
我想将其作为2代替数18
是否有任何位运算我可以用这样的手段吗?
由于您只想将其隔离,无法得到它的指数,很容易:
function firstSetBit(number)
{
return number & -number;
}
它的工作原理,因为如果你把一个数的二进制补码,首先你补充它,将所有零到最低设置位为1,最低设置位为0的权利,然后您添加一个,将右侧的位设置为零,最低设置位再次变为1,结束进位链。因此数字的否定具有相同的“右部分”,直到并包括最低的设定位,但最低设定位左边的所有数字都是输入的补码。因此,如果您将一个数字与其否定进行按位与运算,则最低位集合左侧的所有位都将被抵消。
二元运算符通常会影响数字的所有位。因此,没有特殊的功能只能获得第一个“1”。但你可以尝试这样的功能:
function filterFirstFoundBit(number)
{
for (var i = 0; i < 32; i++) {
if ((1 << i) & number)
{
return 1 << i;
}
}
return number;
}
document.write(filterFirstFoundBit(9)); //10010
试试吧here
function isolateLowestBit(input)
{
mask = 1;
while (mask <= input)
{
if (mask & input)
{
// found match - mask is set to the value of the lowest bit
return mask;
}
mask *= 2; // shift up mask by one bit
}
// no match
return 0;
}
当心的Javascript位运算是一个坏主意,自从使用Javascript号码不自然整数。
读取二进制数字的值从右向左递增,如十进制数字 - 10010是18,而不是9.要清楚,您要求*最低*设置位,是的? –
对不起,错误的描述。而我最需要的就是它。我该怎么做? – user160820
我已经调整了问题标题+示例以匹配我认为你的意思。 –