我正在尝试使用递减输入变量(十进制值)的方法创建我自己的十进制到二进制转换器,将其除以2并存储余数(如二级数学余数),它始终为0或者1.我应该将每个剩余的值存储在一个数组中,我认为可能会向后放置,以便最重要的数字在数组中是第一位的(这是因为当从左到右填充剩余的剩余值时) 。 Soooo是的,我真的不知道如何使用函数将余数值存储在数组中 在此先感谢,如果有什么令人困惑的话,请随意提问,因为我甚至不确定这是否是最好的方法,这就是我想出来的
function decimalToBinary(num) {
var bin = 0;
while (num > 0) {
bin = num % 2 + bin;
num >>= 1; // basically /= 2 without remainder if any
}
alert("That decimal in binary is " + bin);
}
答案 0 :(得分:0)
您的代码几乎是正确的。主要问题是bin
以0
开头;当您添加数字时,它们会以数字形式添加,因此您的代码最终只计算二进制文件1
:以这种方式,10
是初始0
和+1+0+1+0
,结果为2
。您希望将其作为字符串处理:""+1+0+1+0
会产生1010
。因此,唯一需要的改变是:
var bin = "";
如果您想使用数组解决它,只需对代码进行最少的更改,它就是:
function decimalToBinary(num) {
var bin = [];
while (num > 0) {
bin.unshift(num % 2);
num >>= 1; // basically /= 2 without remainder if any
}
alert("That decimal in binary is " + bin.join(''));
}
在这里,我使用.unshift
将一个元素添加到数组的头部(并重新编号其余的元素); .join()
将它们全部收集到一个字符串中。
或者这个:
function decimalToBinary(num) {
var bin = [];
while (num > 0) {
bin[bin.length] = num % 2;
num >>= 1; // basically /= 2 without remainder if any
}
alert("That decimal in binary is " + bin.reverse().join(''));
}
这不是很好,但是说明了你可以用数组做的更多事情:取长度,设置一个任意元素,然后翻转它们。
答案 1 :(得分:0)
只需复制粘贴toBin方法,我便将其记为自定义方法。
function toBin(num) {
let variable = 0;
let power = 0;
while(variable <= num) {
power += 1;
variable = Math.pow(2, power);
}
let result = '';
let change = num;
while(1 <= power) {
let iterationsof2 = Math.pow(2, power)
if(change - iterationsof2 >= 0) {
change = change - iterationsof2;
result += 1;
power--;
continue;
}
result += 0;
power--;
}
return result
}
Test the toBin method with built-in toString(2)
toBin(100) === (100).toString(2) --> true
toBin(1) === (1).toString(2) --> true
toBin(128) === (128).toString(2) --> true