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

(图片来源网络,侵删)
方法1:使用除2取余法(经典算法)
#include <stdio.h>
void decimalToBinary(int n) {
// 处理0的特殊情况
if (n == 0) {
printf("0");
return;
}
// 计算二进制位数
int num = n;
int count = 0;
while (num > 0) {
num /= 2;
count++;
}
// 创建数组存储二进制位
int binary[count];
// 填充数组
for (int i = count - 1; i >= 0; i--) {
binary[i] = n % 2;
n /= 2;
}
// 输出结果
for (int i = 0; i < count; i++) {
printf("%d", binary[i]);
}
}
int main() {
int decimal;
printf("请输入一个十进制数: ");
scanf("%d", &decimal);
printf("二进制表示为: ");
decimalToBinary(decimal);
printf("\n");
return 0;
}
方法2:使用位运算(更高效)
#include <stdio.h>
void decimalToBinary(int n) {
// 处理0的特殊情况
if (n == 0) {
printf("0");
return;
}
// 计算最高有效位的位置
int mask = 1;
int temp = n;
while (temp > 1) {
temp >>= 1;
mask <<= 1;
}
// 从最高位开始输出
while (mask > 0) {
printf("%d", (n & mask) ? 1 : 0);
mask >>= 1;
}
}
int main() {
int decimal;
printf("请输入一个十进制数: ");
scanf("%d", &decimal);
printf("二进制表示为: ");
decimalToBinary(decimal);
printf("\n");
return 0;
}
方法3:递归实现
#include <stdio.h>
void decimalToBinary(int n) {
if (n > 1) {
decimalToBinary(n / 2);
}
printf("%d", n % 2);
}
int main() {
int decimal;
printf("请输入一个十进制数: ");
scanf("%d", &decimal);
printf("二进制表示为: ");
decimalToBinary(decimal);
printf("\n");
return 0;
}
方法4:使用标准库函数(适用于无符号整数)
#include <stdio.h>
#include <limits.h>
void decimalToBinary(unsigned int n) {
for (int i = CHAR_BIT * sizeof(n) - 1; i >= 0; i--) {
printf("%d", (n >> i) & 1);
}
}
int main() {
unsigned int decimal;
printf("请输入一个无符号十进制数: ");
scanf("%u", &decimal);
printf("二进制表示为: ");
decimalToBinary(decimal);
printf("\n");
return 0;
}
注意事项
- 方法1和方法2可以处理负数(取决于具体实现)
- 方法3递归实现简洁,但对于大数可能导致栈溢出
- 方法4使用标准库函数,但仅适用于无符号整数
- 对于负数,通常使用补码表示,需要额外处理
选择哪种方法取决于具体需求,如性能、可读性或是否需要处理负数等因素。

(图片来源网络,侵删)
