进制转换与js实现
# 一、十进制数转换为二进制数
十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并
例:(173.8125)10 =( )2
# 1. 十进制整数转换为二进制整数
十进制整数转换为二进制整数采用"除 2 取余,逆序排列"法。
具体做法是:用 2 去除十进制整数,可以得到一个商和余数;再用 2 去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
例如把 (173)10 转换为二进制数。
解:
注意这里结果是逆序排列,这个过程和递归程序类型
# 2.十进制小数转换为二进制小数
十进制小数转换成二进制小数采用"乘 2 取整,顺序排列"法。具体做法是:用 2 乘十进制小数,可以得到积,将积的整数部分取出,再用 2 乘余下的小数 部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。
然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
例如把(0.8125)转换为二进制小数。
这里和整数正好相反是顺序排列
在上个例子中得(173)10 =(10101101)2
得(0.8125)10 =(0.1101)2
把整数部分和小数部分合并得:
(173.8125)10 =(10101101.1101)2
# 二、js 中十进制转二进制
JS 内置这个方法
const value = parseInt(12).toString(2) // '1100'
// parsetInt里面是要转换的数字,toString里面是要转换的进制,
// 如果要转换为其他进制,替换掉就好了。
parseInt(12).toString(16) // 'c'
1
2
3
4
5
6
2
3
4
5
6
如果要自己代码实现呢?
下面给出正整数和正小数的代码,其它负数情况也类似
// 十进制正整数转二进制
const integerGEQZero = (number) => {
let result = ''
while (number >= 1) {
result = (number % 2) + result
number = Math.floor(number / 2)
}
return result
}
// 十进制正小数转二进制
const floorBetweenZeroOne = (number) => {
let result = ''
while (
number != 0 &&
number != 1 && // 取值到 0 或者 1 为止
result.length < 32 // 或者长度达到需要
) {
// 取小数部分
if (number > 1) {
number = number - 1
}
result = result + Math.floor(number * 2)
number = number * 2
}
result = '0.' + result
return result
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 十进制转 n 进制
function baseConversion(num, base) {
let arr = [num]
while (arr[0] >= base) {
let current = arr[0]
arr[0] = num % base
arr.unshift(Math.floor(current / base))
}
return arr.join(',')
}
console.log(baseConversion(12, 36)) // 12
console.log(baseConversion(124, 36)) // 3,16
console.log(baseConversion(288, 36)) // 8,0
console.log(baseConversion(46656, 18)) // 8,0,0,0
console.log(baseConversion(128, 2)) // 1,0,0,0,0,0,0,0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
上次更新: 2023/04/05, 09:41:10