本文目录导读:

手动计算方法(除2取余法)
# 手动计算步骤
def decimal_to_binary_manual(n):
"""除2取余法"""
if n == 0:
return "0"
binary = ""
while n > 0:
remainder = n % 2 # 取余数
binary = str(remainder) + binary # 余数放在最前面
n = n // 2 # 整数除法
return binary
# 示例
print(decimal_to_binary_manual(10)) # 输出: 1010
print(decimal_to_binary_manual(25)) # 输出: 11001
Python内置函数
# 方法1: bin() 函数
decimal = 10
binary = bin(decimal) # 返回 '0b1010'
print(binary[2:]) # 去掉前缀 '0b',输出: 1010
# 方法2: format() 函数
binary = format(decimal, 'b') # 输出: 1010
# 方法3: f-string (Python 3.6+)
binary = f"{decimal:b}" # 输出: 1010
# 方法4: 指定位数(补零)
binary_8bit = f"{decimal:08b}" # 输出: 00001010
其他编程语言实现
JavaScript
// 内置方法
function decimalToBinary(num) {
return num.toString(2);
}
// 手动实现
function decimalToBinary(num) {
if (num === 0) return "0";
let binary = "";
while (num > 0) {
binary = (num % 2) + binary;
num = Math.floor(num / 2);
}
return binary;
}
console.log(decimalToBinary(10)); // "1010"
Java
public class DecimalToBinary {
// 内置方法
public static String toBinary(int num) {
return Integer.toBinaryString(num);
}
// 手动实现
public static String toBinaryManual(int num) {
if (num == 0) return "0";
StringBuilder binary = new StringBuilder();
while (num > 0) {
binary.insert(0, num % 2);
num /= 2;
}
return binary.toString();
}
public static void main(String[] args) {
System.out.println(toBinary(10)); // 1010
}
}
C/C++
#include <stdio.h>
#include <string.h>
void decimalToBinary(int n) {
if (n == 0) {
printf("0");
return;
}
int binary[32]; // 假设整数为32位
int i = 0;
while (n > 0) {
binary[i] = n % 2;
n = n / 2;
i++;
}
// 反向输出
for (int j = i - 1; j >= 0; j--) {
printf("%d", binary[j]);
}
}
int main() {
decimalToBinary(10); // 输出: 1010
return 0;
}
Shell脚本
#!/bin/bash
# 方法1: 使用bc命令
decimal=10
binary=$(echo "obase=2;$decimal" | bc)
echo $binary # 输出: 1010
# 方法2: 手动实现
decimal_to_binary() {
local n=$1
local binary=""
if [ $n -eq 0 ]; then
echo "0"
return
fi
while [ $n -gt 0 ]; do
binary=$(( n % 2 ))$binary
n=$(( n / 2 ))
done
echo $binary
}
decimal_to_binary 10 # 输出: 1010
处理负数和小数
# 处理负数(补码表示)
def negative_to_binary(n, bits=8):
"""将负数转换为指定字长的补码"""
if n >= 0:
return f"{n:0{bits}b}"
else:
# 计算补码:2^bits + n
return f"{(1 << bits) + n:0{bits}b}"
# 处理小数(乘2取整法)
def decimal_to_binary_fraction(num, precision=8):
"""将小数部分转换为二进制"""
if num >= 1 or num <= 0:
raise ValueError("请输入0到1之间的小数")
binary = ""
for _ in range(precision):
num *= 2
if num >= 1:
binary += "1"
num -= 1
else:
binary += "0"
if num == 0:
break
return binary if binary else "0"
# 完整转换(整数+小数)
def decimal_to_binary_full(num, int_bits=8, frac_bits=8):
"""将十进制数完整转换为二进制"""
# 处理符号
positive = num >= 0
num = abs(num)
# 分离整数和小数部分
int_part = int(num)
frac_part = num - int_part
# 转换整数部分
if int_part == 0:
int_binary = "0" * int_bits
else:
int_binary = format(int_part, f'0{int_bits}b')[-int_bits:]
# 转换小数部分
frac_binary = decimal_to_binary_fraction(frac_part, frac_bits)
# 组合结果
if positive:
return f"{int_binary}.{frac_binary}"
else:
# 负数:取反加一
# 这里简化处理,实际需要完整补码运算
return f"-{int_binary}.{frac_binary}"
# 测试
print(decimal_to_binary_full(10.25)) # 输出: 00001010.01000000
| 方法 | 适用场景 | 特点 |
|---|---|---|
| 除2取余 | 手动计算、学习原理 | 直观易理解 |
| 内置函数 | 编程快速实现 | 简单高效 |
| 位运算 | 性能要求高 | 底层操作 |
| 数学方法 | 任意进制转换 | 通用性强 |
选择哪种方法取决于你的具体需求:
- 学习原理:使用手动计算方法
- 日常编码:使用内置函数
- 特殊需求:如处理负数、小数、任意进制等,需要自定义实现