在C语言中,将十进制数转换为二进制数主要有以下两种常见方法,均基于“除2取余,逆序排列”的原理:
一、使用位操作符和循环结构(推荐)
通过不断对十进制数进行模2运算(获取最低位二进制数),然后将商右移,重复此过程直到商为0,最后倒序输出余数。
示例代码:
```c
include
void printBinary(int num) {
int bit;
while (num > 0) {
bit = num % 2; // 获取最低位
printf("%d", bit);
num = num / 2; // 右移操作
}
printf("n");
}
int main() {
int num;
printf("请输入一个十进制数: ");
scanf("%d", &num);
printf("二进制表示为: ");
printBinary(num);
return 0;
}
```
二、使用数组存储余数并倒序输出
通过循环将每次除2的余数存储到数组中,最后从高位到低位依次输出。
示例代码:
```c
include
int main() {
int n, i, b = {0};
printf("输入一个十进制数: ");
scanf("%d", &n);
int index = 0;
while (n > 0) {
b[index++] = n % 2; // 存储余数
n = n / 2; // 右移操作
}
// 倒序输出
for (i = index - 1; i >= 0; i--) {
printf("%d", b[i]);
}
printf("n");
return 0;
}
```
三、使用递归函数实现
通过递归调用自身处理商,将余数作为二进制位输出,直到商为0。
示例代码:
```c
include
void printBinaryRecursive(int num) {
if (num > 0) {
printBinaryRecursive(num / 2);
printf("%d", num % 2);
}
}
int main() {
int num;
printf("请输入一个十进制数: ");
scanf("%d", &num);
printf("二进制表示为: ");
printBinaryRecursive(num);
printf("n");
return 0;
}
```
注意事项
上述方法仅适用于非负整数。若需处理负数,可先取绝对值再转换,或使用补码表示。
示例代码中数组大小固定(如16或20),实际应用中可根据需求调整。
以上方法均可实现十进制到二进制的转换,选择时可根据具体需求(如代码简洁性、可读性或位数要求)进行权衡。