谁能解释这个过程与转换十进制数字二进制



我已经在互联网上寻找一种将十进制数转换为二进制数的方法。我在某个论坛上找到了这段代码。

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

循环的其余部分只是根据需要执行相同的操作:找到当前状态的最后一位,将其添加到输出中,移动当前状态。

最新更新