Установка конкретных битов в число - PullRequest
3 голосов
/ 22 сентября 2009

var d = 7;

в двоичном виде: 7 = (111)

Что я хочу сделать, так это установить второе место справа от 1 или 0 в распоряжении,

и вернуть десятичное значение.

Например, если я хочу сделать второе от 1 до 0, то после процесса должно вернуться 5,

потому что 5 = (101).

Как реализовать это в JavaScript?

EDIT

ответ должен быть примерно таким:

function func(decimal,n_from_right,zero_or_one)
{

}

Где десятичное число - число для обработки, n_from_right - это количество бит справа, в моем примере выше 2. zero_or_one означает установить этот конкретный бит в 0 или 1 в распоряжении.

Ответы [ 7 ]

15 голосов
/ 22 сентября 2009

Самый простой способ очистить бит - это использовать операцию и с битовым дополнением.

7 =  0000000000000111
~2 = 1111111111111101
& :  0000000000000101

В коде:

var d = 7, mask = 2;
d &= ~mask;

Чтобы установить бит вместо очистки, используйте вместо этого оператор или:

d |= mask;

Если вам необходимо динамически создать маску для обработки разных битов, вы начинаете со значения один (двоичное 0000000000000001) и сдвигаете бит до правильного индекса. Второй бит имеет индекс один (самый правый бит имеет индекс ноль), поэтому:

var index = 1;
var mask = 1 << index;
11 голосов
/ 22 сентября 2009

Один из способов сделать это, но вам, вероятно, лучше использовать побитовые операторы

var d = 7;
var binary = d.toString(2);

binary = binary.split('');
binary[1] = "0";
binary = binary.join('');
binary = parseInt(binary,2);
1 голос
/ 26 июня 2013

/ ** Преобразовать десятичное число в двоичное ** /

var toBinary = function(decNum){
    return parseInt(decNum,10).toString(2);
}

/ ** Преобразовать двоичное число в десятичное ** /

var toDecimal = function(binary) {
    return parseInt(binary,2).toString(10);
}
1 голос
/ 22 сентября 2009

Чтобы установить второй бит, просто ИЛИ с 2 (10 в двоичном виде)

var d=5;
var mask=2;
var second_bit_set=d | mask;


          d: 101
       mask: 010
 --------------------
 bitwise OR: 111

Чтобы удалить второй бит, вам нужно AND со значением, в котором установлены все биты, кроме второго. Простой способ построить это значение - выполнить побитовое НЕ для значения, например, ~ 2

var d=7;
var mask=~2;
var second_bit_unset=d & mask;

           d: 111
        mask: 101
 --------------------
 bitwise AND: 101

Для получения дополнительной информации об этих операторах см. справочник по битовым операторам

0 голосов
/ 06 ноября 2012
var str="XXX\tYYYYYYY\n";
for(var i=0;i<=7;i++){
str+=(i+8).toString(2).substring(1)+"\t"+(i*11+22+128).toString(2).substring(1);
str+="\n";
}
console.info(str);

Вы можете сделать func из моего велосипеда

0 голосов
/ 22 сентября 2009

Вы можете использовать битовые операторы Javascript :

var five = 7 & ~2;

2 = 10 в двоичном виде

0 голосов
/ 22 сентября 2009

попробуйте использовать битовое смещение:

d &~(1<<1)

см. Также это документы

...