Получение младшего значащего бита в JavaScript

Я пытаюсь получить наименее значимый bit из number в JavaScript.

У меня есть следующий код:

let lsb = (parseInt("110", 2) & 0xffff);

Насколько я понимаю, наименее значащий бит числа 110 равен 110, так как это самый правый установленный бит.

Однако приведенный выше код возвращает «6», что является общим значением 110, а не наименее значащим bit.

Как я могу получить младший значащий бит?


person James Monger    schedule 04.02.2016    source источник
comment
& 0xffff не является ни способом получить младший установленный бит, ни младший бит. Это просто совершенно не связано с ними обоими.   -  person harold    schedule 04.02.2016


Ответы (4)


Младший значащий бит — это самый правый бит, а не самый правый установленный бит. Чтобы получить это, И с 1.

let lsb = parseInt("110", 2) & 1;
person Barmar    schedule 04.02.2016
comment
Спасибо, я неправильно понял значение наименее значимого бита. - person James Monger; 04.02.2016

Я беру вас на свой пример, что вы ищете самый младший бит, а не самый младший бит

То, что вы ищете, это немного побитовый взлом.

Мы можем сделать это, используя способ представления отрицательных чисел (дополнение до двух)

var lowestSetBit = (value) & (-value)

Если вы на самом деле ищете наименее значимый бит, вы можете просто замаскировать этот бит

var leastSignificantBit = value & 1
person Strikeskids    schedule 04.02.2016
comment
lowestSetBit был чрезвычайно полезен для меня. Гораздо быстрее, чем разворачивание, и довольно элегантно. Не исключено, что я бы сам до этого додумался. - person Andrew; 03.06.2016
comment
Я считаю, что lowestSetBit вернет значение вместо бита. - person Hitesh Kumar; 28.08.2018

https://en.wikipedia.org/wiki/Least_significant_bit:

младший значащий бит (LSB) — это позиция бита в двоичном целом числе, задающая значение единиц, то есть определяющая, является ли число четным или нечетным.

Так что это легко:

let lsb = parseInt("110", 2) & 1

или даже это:

let lsb = parseInt("110", 2) % 2
person Gavriel    schedule 04.02.2016
comment
Вам не хватает входной системы счисления 2. - person Barmar; 04.02.2016
comment
Часть его оригинального кода, которая анализирует целое число, использует основание 2, поэтому я думаю, что это ясно. - person Barmar; 04.02.2016
comment
Зачем ему намеренно давать второй аргумент parseInt, если это не то, что он намеревался? В любом случае, вы верите во что хотите. - person Barmar; 04.02.2016

Найти младший значащий бит числа можно легко:

someNumber & 1

или в вашем конкретном случае:

let lsb = (parseInt("110", 2) & 1

Это работает путем маскирования каждого бита нулем, кроме младшего значащего бита, который равен &'d этой 1.

Например, пусть наш входной номер будет 21

21 & 1

Такой же как:

  10101
& 00001 
-------
  00001 // => returns 1 since the last bit is turned on
person Nick Zuber    schedule 04.02.2016