C语言实现十进制数转换为二进制数
在C语言中,将十进制数转换为二进制数有几种常见方法,以下是几种实现方式:

(图片来源网络,侵删)
方法1:使用除2取余法(经典算法)
#include <stdio.h>
void decimalToBinary(int num) {
// 处理0的特殊情况
if (num == 0) {
printf("0");
return;
}
// 计算二进制位数
int binaryNum[32]; // 假设32位整数
int i = 0;
// 除2取余法
while (num > 0) {
binaryNum[i] = num % 2;
num = num / 2;
i++;
}
// 逆序输出结果
for (int j = i - 1; j >= 0; j--) {
printf("%d", binaryNum[j]);
}
}
int main() {
int decimalNumber;
printf("请输入一个十进制数: ");
scanf("%d", &decimalNumber);
printf("二进制表示为: ");
decimalToBinary(decimalNumber);
printf("\n");
return 0;
}
方法2:使用位运算(更高效)
#include <stdio.h>
void decimalToBinaryBitwise(int num) {
// 处理0的特殊情况
if (num == 0) {
printf("0");
return;
}
// 从最高位开始检查
for (int i = 31; i >= 0; i--) {
int bit = (num >> i) & 1;
printf("%d", bit);
// 在每4位后添加空格(可选,提高可读性)
if (i % 4 == 0 && i != 0) {
printf(" ");
}
}
}
int main() {
int decimalNumber;
printf("请输入一个十进制数: ");
scanf("%d", &decimalNumber);
printf("二进制表示为: ");
decimalToBinaryBitwise(decimalNumber);
printf("\n");
return 0;
}
方法3:递归实现
#include <stdio.h>
void decimalToBinaryRecursive(int num) {
if (num > 1) {
decimalToBinaryRecursive(num / 2);
}
printf("%d", num % 2);
}
int main() {
int decimalNumber;
printf("请输入一个十进制数: ");
scanf("%d", &decimalNumber);
printf("二进制表示为: ");
decimalToBinaryRecursive(decimalNumber);
printf("\n");
return 0;
}
方法4:使用标准库函数(C99及以上)
#include <stdio.h>
#include <limits.h> // 用于CHAR_BIT
void decimalToBinaryLibrary(int num) {
// 计算需要的位数
int bits = sizeof(num) * CHAR_BIT;
for (int i = bits - 1; i >= 0; i--) {
int bit = (num >> i) & 1;
printf("%d", bit);
// 每4位添加空格
if (i % 4 == 0 && i != 0) {
printf(" ");
}
}
}
int main() {
int decimalNumber;
printf("请输入一个十进制数: ");
scanf("%d", &decimalNumber);
printf("二进制表示为: ");
decimalToBinaryLibrary(decimalNumber);
printf("\n");
return 0;
}
注意事项
- 对于负数,以上方法会显示其二进制补码表示
- 方法2和方法4更高效,因为使用了位运算
- 方法3递归实现简洁,但对于大数可能导致栈溢出
- 方法4考虑了不同平台的字节大小差异
如果需要处理负数或浮点数,需要更复杂的转换逻辑。

(图片来源网络,侵删)
