найти значение данного бита в JavaScript - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть тест, который я не понимаю, что мне нужно делать, может быть, потому что я мало работал с битами.

тест таков:

it('you should be able to find the value of a given bit', function() {
    expect(answers.valueAtBit(128, 8)).to.eql(1);
    expect(answers.valueAtBit(65, 1)).to.eql(1);
    expect(answers.valueAtBit(65, 7)).to.eql(1);
    expect(answers.valueAtBit(128, 1)).to.eql(0);
});

, и это функция, которую они мне дали:

valueAtBit: function(num, bit) {
},

В этой функции я должен вернуть значение, котороедолжен совпадать с тестами.

1 Ответ

0 голосов
/ 14 ноября 2018

Вы можете преобразовать целые числа в двоичные строки, например:

let n = 11
let bin = n.toString(2)
console.log(bin)

При этом вам просто нужно получить правильный символ.Предполагая, что вы считаете справа (и начинаете с 1), вы можете сделать:

function valueAtBit(num, bit) {
    n = num.toString(2)

    return bit > n.length 
           ? 0 
           : n.toString(2)[n.length - bit]
}
console.log(valueAtBit(11, 1))
console.log(valueAtBit(11, 2))
console.log(valueAtBit(11, 3))
console.log(valueAtBit(11, 4))
console.log(valueAtBit(11, 5)) // all zero after this

Другой вариант, если вы хотите сделать математику, это разделить на число на 2 ** бит и взять мод:

function valueAtBit(num, bit) {
    return Math.floor(num / (2 ** bit)) % 2
}

let num = 523
console.log("number in binary:", num.toString(2))

for (let i = 0; i < 10; i++){
    console.log("bit: ", i, valueAtBit(num, i))
}
...