我已经在互联网上寻找一种将十进制数转换为二进制数的方法。我在某个论坛上找到了这段代码。
var number = prompt("Type a number!") //Asks user to input a number
var converted = []; // creates an array with nothing in it
while(number>=1) { //While the number the user typed is over or equal to 1 its shoud loop
converted.unshift(number%2); // takes the "number" and see if you can divid it by 2 and if theres any rest it puts a "1" otherwise "0"
number = Math.floor(number/2); // Divides the number by 2, then starts over again
}
console.log(converted)
我没有完全理解所有的东西,所以我对我认为的代码片段做了一些注释。有人能解释得更详细吗?还是我认为代码是正确的?
此代码基于将十进制数转换为二进制的技术。
如果取一个十进制数。我把它除以2,得到余数要么是0,要么是1。一旦你把57一直除以0。您可以得到二进制数,例如:
57/2 = 28 r 1;28/2 = 14 r 0;14/2 = 7 r 0;7/2 = 3 r 1;3/2 = 1 r 1;1/2 = 0 r 1;
余数为二进制数。如果有点难读,我很抱歉。我强烈建议你把它写在纸上。从最后一个余数读到第一个余数,余数如下:111001
将其反转以使其正确。Array.unshift()可以做到这一点,或者您可以在while循环之后使用array.push()和array.reverse()。Unshift()可能是更好的方法。
57的十进制数等于111001,您可以查询。
BTW,这个算法适用于其他基数,只要你是从十进制转换。至少就我所知是这样。
希望这对你有帮助。
看来你已经掌握要点了。
让我们从一个随机数开始:
6 === 110b
现在让我们看看上面的方法做了什么:
这个数字是小于1的,因此,让我们把这个数字的最后一位加到输出
6%2 === 0 //output [0]
我们处理的数字除以2后,实际上就是把整个数字向右移了位,现在是11b
(从原来的110b
)。11b === 3
,如你所料。
您也可以将number % 2
视为按位AND
操作(number & 1
):
110
& 1
-----
0
循环的其余部分只是根据需要执行相同的操作:找到当前状态的最后一位,将其添加到输出中,移动当前状态。