我有一個像找到最低設置位
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
我已經調整了問題標題+示例以匹配我認爲你的意思。 –