#javascript #binary
#javascript #двоичный
Вопрос:
Из других поисковых запросов я обнаружил, что эта проблема называется «Вес Хэмминга» или «Количество населения». Есть много ответов, которые там даны с таким количеством статистики? Мне нужно найти решение простым способом? Сложность не имеет большого значения. Есть ли в JavaScript какая-либо встроенная функция, подобная Java Integer.bitCount?
В настоящее время я делаю это следующим образом.
var binary = 3;
var original = binary;
var count = 0;
while(binary>0)
{
binary = binary >> 1 << 1;
if(original-binary==1)
count ;
original = binary >> 1;
binary = original;
}
Есть ли лучший, более простой и элегантный способ для этого?
Комментарии:
1. Если это действительно строка,
str.split('1').length
но это вообще не javascript, не так ли, это Java2. связано с обзором кода ( codereview.stackexchange.com/questions )
3. @adeneo извините за неправильные данные. Мне нужно выполнить это для числа.
4. Тогда это
numb.toString().split('1').length
, тада!5. Имеют ли вышеуказанные методы высокую временную сложность? Что я должен предпочесть?
Ответ №1:
попробуйте это
var binary = 10;
var result = binary.toString(2); //Converts to binary
var count = result.split(1);// count -1 is your answer
alert((result.split('1').length-1));
также может быть записано как
(binary.toString(2).split('1').length-1)
toString(2) : helps to split it in a base2 format which is binary, can do this in a range of 2- 36 (iam not sure about the range)
Ответ №2:
Если вы хотите посчитать 1 цифру в двоичном представлении, мы можем использовать регулярное выражение, подобное этому.
number.toString(2).match(/1/g).длина
Ответ №3:
Простой способ без использования встроенных функций:
function f(n){
let i = 0;
do if(namp;1) i; while(n>>=1)
return i;
}
// example:
console.log(f(7)); // 3
Ответ №4:
function numOfOnes(n) {
if(n === 0) return n;
return (n amp; 1) numOfOnes(n >>= 1);
}
В основном этот подход относится к рекурсивному вызову.
У него есть базовое условие, когда нет числа для вычисления.
В противном случае он вызывает себя (n >>= 1)
и добавляет последнюю цифру (n amp; 1)
к результату.
например. 7 имеет двоичное представление 111 = 1 1 1 = 3
17 имеет двоичное представление 10001 = 1 0 0 0 1 = 2
Комментарии:
1. Хороший ответ, но объяснение того, как и почему это работает, сделало бы этот ответ отличным.
Ответ №5:
function countOnesInDecimal(num) {
let count = 0;
let binary = num.toString(2);
const splitted = binary.split('');
for (const iterator of splitted) {
if (iterator === `1`) {
count = 1;
}
}
return count;
}
console.log(countOnesInDecimal(3));
Комментарии:
1. нет необходимости разделять строку, вы можете так же легко выполнить итерацию по строке вместо массива