以下是使用 `for` 循环实现二进制转换的详细方法,分步骤说明适用于整数和小数的转换:
一、整数二进制转换(正数)
1. 二进制转十进制(逆向思维)
通过不断取余和位移操作,将二进制数转换为十进制数。例如将 `1101` 转换:
$1 times 2^3 + 1 times 2^2 + 0 times 2^1 + 1 times 2^0 = 13_{10}$
2. 十进制转二进制(正向思维)
通过不断取余(`n % 2`)和整除(`n / 2`),将十进制数转换为二进制数。具体步骤:
1. 初始化一个空字符串或数组用于存储二进制位。
2. 当 `n > 0` 时,执行以下操作:
- 将 `n % 2` 的结果(0 或 1)添加到结果字符串的前面。
- 更新 `n` 为 `n / 2`(向下取整)。
3. 最后反转结果字符串(因为最低位先被计算)。
示例代码(C语言):
```c
include include void decimalToBinary(int n) { if (n == 0) { printf("0"); return; } char binary = {0}; // 假设整数不超过32位 int index = 0; while (n > 0) { binary[index] = (n % 2) + '0'; // 存储余数 n = n / 2; // 更新n index++; } // 反转字符串 for (int i = 0; i < index / 2; i++) { char temp = binary[i]; binary[i] = binary[index - i - 1]; binary[index - i - 1] = temp; }
printf("二进制数为: %sn", binary);
}
int main() {
int num;
printf("请输入一个十进制数: ");
scanf("%d", &num);
decimalToBinary(num);
return 0;
}
```
二、小数二进制转换(十进制分数)
1. 乘2取整法
通过不断将小数部分乘以2,并取整数部分,逐步构建二进制小数部分。例如将 `0.625` 转换:
$0.625 times 2 = 1.25$ → 取整 `1`
$0.25 times 2 = 0.5$ → 取整 `0`
$0.5 times 2 = 1.0$ → 取整 `1`
结果为 `0.101_2`(循环节为 `1`)
2. 注意事项
该方法仅适用于纯小数(小于1的数)。
需设置精度限制,避免无限循环。例如,当连续两次取整结果相同时,可终止循环。
示例代码(C语言):
```c
include
void decimalToBinaryFraction(double d) {
printf("二进制小数部分为: ");
int integerPart = (int)d;
double fractionalPart = d - integerPart;
int index = 0;
while (fractionalPart > 0 && index < 15) { // 限制精度为15位
fractionalPart *= 2;
int bit = (int)fractionalPart;
printf("%d", bit);
fractionalPart -= bit;
index++;
}
printf("n");
}
int main() {
double num;
printf("请输入一个十进制小数: ");
scanf("%lf", &num);
decimalToBinaryFraction(num);
return 0;
}
```
三、其他编程语言的实现思路
1. Python 示例
```python
def int_to_binary(n):
if n == 0:
return "0"
binary = ""
while n > 0:
binary = str(n % 2) + binary
n = n // 2
return binary
def float_to_binary_fraction(f):
binary = "0."
while f > 0 and len(binary) < 15:
f *= 2
bit = int(f)
binary += str(bit)