JS进制转换
在编程中,经常会涉及到各种进制的转换,比如十进制转二进制、八进制、十六进制等。本文将详细介绍在JavaScript中如何进行进制转换,包括十进制转其他进制和其他进制转十进制两个方向。希望通过本文的学习,读者能够熟练掌握这些进制转换的方法。
十进制转其他进制
十进制转二进制
要将十进制数转换为二进制数,最简单的方法是通过不断除2取余的方式进行计算,将余数倒序排列即可。以下是一个示例代码:
function decimalToBinary(decimal) {
let binary = '';
while (decimal > 0) {
binary = (decimal % 2) + binary;
decimal = Math.floor(decimal / 2);
}
return binary;
}
console.log(decimalToBinary(10)); // 输出: 1010
在上面的示例代码中,我们定义了一个decimalToBinary
函数,传入一个十进制数decimal
,然后通过循环将每次的余数拼接到二进制数binary
的最前面,最终得到转换后的二进制数。
十进制转八进制
十进制转八进制的方法与转二进制类似,只需将除数由2换成8即可,以下是一个示例代码:
function decimalToOctal(decimal) {
let octal = '';
while (decimal > 0) {
octal = (decimal % 8) + octal;
decimal = Math.floor(decimal / 8);
}
return octal;
}
console.log(decimalToOctal(20)); // 输出: 24
十进制转十六进制
十进制转十六进制同样是通过不断除16取余的方式进行计算,将余数转换为十六进制表示即可。以下是一个示例代码:
function decimalToHex(decimal) {
let hex = '';
while (decimal > 0) {
let remainder = decimal % 16;
hex = (remainder < 10 ? remainder : String.fromCharCode(remainder + 55)) + hex;
decimal = Math.floor(decimal / 16);
}
return hex;
}
console.log(decimalToHex(30)); // 输出: 1E
在上面的示例代码中,我们定义了一个decimalToHex
函数,将余数小于10的转换为对应的数字,大于等于10的转换为A~F的字母表示。
其他进制转十进制
二进制转十进制
要将二进制数转换为十进制数,只需按照权重相加的方式进行计算即可。以下是一个示例代码:
function binaryToDecimal(binary) {
let decimal = 0;
for (let i = 0; i < binary.length; i++) {
decimal += parseInt(binary[binary.length - 1 - i]) * Math.pow(2, i);
}
return decimal;
}
console.log(binaryToDecimal('1010')); // 输出: 10
八进制转十进制
八进制转十进制同样是按照权重相加的方式进行计算,只需将权重设置为8即可。以下是一个示例代码:
function octalToDecimal(octal) {
let decimal = 0;
for (let i = 0; i < octal.length; i++) {
decimal += parseInt(octal[octal.length - 1 - i]) * Math.pow(8, i);
}
return decimal;
}
console.log(octalToDecimal('24')); // 输出: 20
十六进制转十进制
十六进制转十进制是通过权重相加的方式进行计算,不同的是需要将A~F的字母表示转换为对应的数字。以下是一个示例代码:
function hexToDecimal(hex) {
let decimal = 0;
for (let i = 0; i < hex.length; i++) {
let value = isNaN(parseInt(hex[i])) ? hex[i].charCodeAt() - 55 : parseInt(hex[i]);
decimal += value * Math.pow(16, hex.length - 1 - i);
}
return decimal;
}
console.log(hexToDecimal('1E')); // 输出: 30