设置数字中的特定位

时间:2009-09-22 09:21:08

标签: javascript binary decimal

var d = 7;

二进制:7 =(111)

我想要做的是将第二名从右边设置为1或0处置,

并返回小数值。

例如,如果我想将第二个1设为0,那么在进程之后应返回5,

因为5 =(101)。

如何在javascript中实现这一点?

修改

答案应该是这样的:

function func(decimal,n_from_right,zero_or_one)
{

}

其中decimal是要处理的数字, n_from_right是右边的多少位,在我上面的例子中是2。 zero_or_one表示将该特定位设置为0或1。

7 个答案:

答案 0 :(得分:15)

清除一点的最简单方法是使用和它的位补码运算。

7 =  0000000000000111
~2 = 1111111111111101
& :  0000000000000101

在代码中:

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

要设置位而不是清除它,请使用或运算符:

d |= mask;

如果需要动态创建掩码以处理不同的位,则从值1开始(二进制0000000000000001)并将该位移位到正确的索引。第二位具有索引1(最右边的位具有索引零),因此:

var index = 1;
var mask = 1 << index;

答案 1 :(得分:11)

一种方法,但你可能会更好地使用按位运算符

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

binary = binary.split('');
binary[1] = "0";
binary = binary.join('');
binary = parseInt(binary,2);

答案 2 :(得分:1)

要设置第二位,只需用2表示(二进制10)

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


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

要删除第二位,除了第二位之外,您希望AND设置所有位的值。构造此值的一种简单方法是对值执行按位NOT,例如, 〜2

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

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

有关这些运算符的详细信息,请参阅此bitwise operator reference

答案 3 :(得分:1)

/ **  将十进制数转换为二进制数  ** /

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

/ **  将二进制数转换为十进制数  ** /

var toDecimal = function(binary) {
    return parseInt(binary,2).toString(10);
}

答案 4 :(得分:0)

尝试使用bitshifting:

d &~(1<<1)

另见this docs

答案 5 :(得分:0)

您可以使用Javascript bitwise operators

var five = 7 & ~2;

2 = 10二进制

答案 6 :(得分:0)

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);

你可以从我的自行车上做一个功能