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。
答案 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)
答案 5 :(得分:0)
答案 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);
你可以从我的自行车上做一个功能