js各进制之间的相互转换

本文深入探讨了十进制数到二进制、八进制、十六进制的转换方法,以及相反方向的转换过程,提供了详细的解析步骤与实例演示。
十进制转二进制 parseInt(num).toString(2)
十进制转八进制parseInt(num).toString(8)
十进制转十六进制parseInt(num).toString(16)
二进制转十进制parseInt(num,2)
八进制转十进制parseInt(num,8)
十六进制转十进制parseInt(num,16)
二进制转八进制parseInt(num,2).toString(8)
八进制转二进制parseInt(num,8).toString(2)
二进制转十六进制parseInt(num,2).toString(16)
十六进制转二进制parseInt(num,16).toString(2)
八进制转十六进制parseInt(num,8).toString(16)
十六进制转八进制parseInt(num,16).toString(8)
<think>我们正在讨论二进制与十进制相互转换方法。用户要求了解具体的方法,包括原理和操作步骤。 根据引用[1]和[2],十进制进制有两种主要方法:除2取余法(用于整数部分)和乘2取整法(用于小数部分)。 同时,二进制进制则采用按权展开相加的方法。 我将按照以下结构回答: 1. 十进制整数进制(除2取余法)及原理 2. 十进制小数进制(乘2取整法)及原理 3. 二进制进制(按权展开)及原理 4. 举例说明(使用用户例子13.625) 5. 代码示例(参考引用[2]的整数转换,并补充小数转换) 6. 生成相关问题 注意:引用[1]提到很多资源只讲操作不讲原理,因此我将着重解释原理。 开始回答: </think>### 二进制与十进制相互转换详解 以下方法严格遵循数学原理,避免“只讲操作不提原因”的问题[^1],核心是**位权展开式**: $$ \text{十进制数} = \sum_{k=-\infty}^{n} d_k \times 2^k \quad (d_k=0\ \text{或}\ 1) $$ --- #### **一、十进制 → 二进制(原理:位权分解)** 1. **整数部分:除2取余法** - **原理**:十进制整数 $N$ 可表示为 $N = 2 \times Q + R$($R$ 为余数),$R$ 即最低位值 - **步骤**: ```python while N > 0: 余数 = N % 2 # 获取当前最低位 N = N // 2 # 右移一位(相当于除以2取整) 结果 = 余数 + 结果 # 余数从右向左排列 ``` **示例**(十进制13 → 二进制): $$ \begin{align*} 13 \div 2 &= 6 \cdots \textcolor{red}{1} & \quad \text{(最低位)} \\ 6 \div 2 &= 3 \cdots \textcolor{red}{0} \\ 3 \div 2 &= 1 \cdots \textcolor{red}{1} \\ 1 \div 2 &= 0 \cdots \textcolor{red}{1} & \quad \text{(最高位)} \end{align*} $$ $\therefore 13_{10} = \textcolor{red}{1101}_2$ 2. **小数部分:乘2取整法** - **原理**:小数 $F$ 满足 $F \times 2 = I + F'$($I$ 为整数位,即二进制位) - **步骤**: ```python while F ≠ 0 and 精度未达限: F = F × 2 整数位 = int(F) # 取整数部分(0或1) F = F - 整数位 # 保留剩余小数 结果 += 整数位 # 从左向右排列 ``` **示例**(十进制0.625 → 二进制): $$ \begin{align*} 0.625 \times 2 &= \textcolor{red}{1}.25 & \quad \text{(最高位)} \\ 0.25 \times 2 &= \textcolor{red}{0}.5 \\ 0.5 \times 2 &= \textcolor{red}{1}.0 & \quad \text{(最低位)} \end{align*} $$ $\therefore 0.625_{10} = \textcolor{red}{0.101}_2$ 3. **含小数的十进制数** 组合整数与小数部分:$13.625_{10} = 1101.101_2$ --- #### **二、二进制 → 十进制(原理:位权展开)** **公式**: $$ \text{十进制值} = \sum (\text{二进制位} \times 2^{\text{位置权重}}) $$ - **位置权重**:小数点左侧从 $2^0$ 递增,右侧从 $2^{-1}$ 递减 **示例**(二进制 $1101.101_2$): $$ \begin{align*} \text{整数部分:} & \quad 1 \times 2^3 + 1 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 = 8 + 4 + 0 + 1 = 13 \\ \text{小数部分:} & \quad 1 \times 2^{-1} + 0 \times 2^{-2} + 1 \times 2^{-3} = 0.5 + 0 + 0.125 = 0.625 \\ \text{总和:} & \quad 13 + 0.625 = 13.625 \end{align*} $$ --- #### **三、代码实现(JavaScript)** ```javascript // 十进制整数进制(引用[2]优化版) function decToBinInt(dec) { if(dec === 0) return "0"; let bin = ""; while(dec > 0) { bin = (dec % 2) + bin; // 余数为二进制位 dec = Math.floor(dec / 2); // 除2取整 } return bin; } // 十进制小数进制 function decToBinFrac(frac, precision=10) { let bin = "."; while(frac > 0 && precision--) { frac *= 2; bin += Math.floor(frac); // 取整数位 frac = frac % 1; // 保留小数部分 } return bin; } // 示例:13.625 → "1101.101" console.log(decToBinInt(13) + decToBinFrac(0.625)); ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值