设置数字中的特定位

omg*_*omg 3 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)
{

}
Run Code Online (Sandbox Code Playgroud)

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

Guf*_*ffa 15

清除一点的最简单方法是使用和它的位补码操作.

7 =  0000000000000111
~2 = 1111111111111101
& :  0000000000000101
Run Code Online (Sandbox Code Playgroud)

在代码中:

var d = 7, mask = 2;
d &= ~mask;
Run Code Online (Sandbox Code Playgroud)

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

d |= mask;
Run Code Online (Sandbox Code Playgroud)

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

var index = 1;
var mask = 1 << index;
Run Code Online (Sandbox Code Playgroud)


Rus*_*Cam 11

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

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

binary = binary.split('');
binary[1] = "0";
binary = binary.join('');
binary = parseInt(binary,2);
Run Code Online (Sandbox Code Playgroud)

  • 我同意按位运算是最好的,但+1指出了相对鲜为人知的转换为二进制字符串的方法. (4认同)