在C语言中,将十进制数转换为二进制数可以通过 辗转相除法(欧几里得算法)实现。该方法通过不断取余和整除操作,将余数倒序排列得到二进制表示。以下是具体实现方法和示例代码:
一、核心思路
除2取余法
用2对十进制数进行辗转相除,记录每次的余数。将余数从下到上排列,即可得到二进制数。例如,将302转换为二进制:
```
302 / 2 = 151 余 0
151 / 2 = 75 余 1
75 / 2 = 37 余 1
37 / 2 = 18 余 1
18 / 2 = 9 余 0
9 / 2 = 4 余 1
4 / 2 = 2 余 0
2 / 2 = 1 余 0
```
最终二进制为 `100101110`。
位运算优化
C语言中可用位运算(如 `n & 1` 获取最低位,`n >>= 1` 右移一位)来提高效率,避免字符串操作。
二、示例代码
以下是两种实现方式:
1. 使用字符数组存储二进制结果
```c
include
void decimalToBinary(int num) {
if (num == 0) {
printf("0");
return;
}
char binary = {0}; // 存储32位二进制,最后一位为'0'
int index = 31;
while (num > 0) {
binary[index] = (num & 1) ? '1' : '0'; // 获取最低位
num >>= 1; // 右移一位
index--;
}
printf("%sn", binary);
}
int main() {
int num;
printf("输入一个十进制数: ");
scanf("%d", &num);
decimalToBinary(num);
return 0;
}
```
2. 使用循环直接输出二进制位
```c
include
void decimalToBinary(int num) {
if (num == 0) {
printf("0");
return;
}
printf("1");
while (num > 1) {
printf("%d", num & 1); // 输出最低位
num >>= 1; // 右移一位
}
}
int main() {
int num;
printf("输入一个十进制数: ");
scanf("%d", &num);
decimalToBinary(num);
return 0;
}
```
三、代码说明
处理特殊情况
当输入为0时,直接输出`0`。
存储与输出
- 使用字符数组存储二进制结果时,从高位到低位填充字符数组,最后通过`printf`输出。
- 使用循环直接输出时,通过`printf`依次输出每个二进制位。
效率优化
位运算(如`n & 1`)比取余运算(`n % 2`)更快,因此推荐使用位运算实现。
四、示例运行
输入 `302`,输出 `100101110`(二进制)。
通过上述方法,可以高效地将十进制数转换为二进制数,并根据需求选择存储和输出方式。