创建一个函数toBins,参数为一个正整数n。函数将会把传入的n转化为二进制字符串。
四个字:除2取余
下面以 10 为例子 注意js除法取整用parseInt
10 % 2==0 bins[bins.length] = 0
10 / 2%2==1 bins[bins.length] = 1
10 / 2 / 2%2==0 bins[bins.length] = 0
10 / 2 / 2 / 2%2==1 bins[bins.length] =1
function toBins(n) {
if(n == 0) return '0';
var bins = []; //定义空数组
if (n % 2 == 0) { //偶数
bins[bins.length] = 0; //最后一位是0
while (1) {
if (parseInt(n / 2) % 2 == 1) { //(n/2==5)%2==1 第三次循环尽量n==2 (2/2=1)%2==1
bins[bins.length] = 1; //除2取余==1
n = parseInt(n / 2); //n = 10/2 此时n==1进入判断,跳出循环
if (n == 1) { ///判断n==1 跳出循环
break;
}
} else {
bins[bins.length] = 0; // 第二次循环进来 n==5 (5/2=2)%2==0 除2取余为0
n = parseInt(n / 2); //n==2
}
}
}
else { //奇数
bins[bins.length] = 1; //最后一位是1
n = n - 1; //奇数-1之后也是偶数,所以和偶数的循环判断是一样的
while (1) {
if (parseInt(n / 2) % 2 == 1) { //n/2=5
bins[bins.length] = 1;
n = parseInt(n / 2); //n==5
if (n == 1) {
break;
}
} else {
bins[bins.length] = 0;
n = parseInt(n / 2); //n==2
}
}
}
var str = ''; //定义空字符串
for (var i = bins.length - 1; i >= 0; i--) { //循环倒叙遍历的余数
if ((i + 1) % 4 == 0) { //四位一空格 1000 0000
str += ' ' + bins[i];
}
else {
str += bins[i];
}
}
return str;
}
var result = toBins(0); //1000 0000
console.log(result);