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 decimalNum;
printf("请输入一个十进制数: ");
scanf("%d", &decimalNum);
printf("二进制表示为: ");
decimalToBinary(decimalNum);
printf("\n");
return 0;
}
方法2:使用位运算(更高效)
#include <stdio.h>
void decimalToBinaryBitwise(int num) {
// 处理0的特殊情况
if (num == 0) {
printf("0");
return;
}
// 计算最高有效位的位置
int mask = 1;
int temp = num;
while (temp >>= 1) {
mask <<= 1;
}
// 从最高位开始输出
while (mask) {
printf("%d", (num & mask) ? 1 : 0);
mask >>= 1;
}
}
int main() {
int decimalNum;
printf("请输入一个十进制数: ");
scanf("%d", &decimalNum);
printf("二进制表示为: ");
decimalToBinaryBitwise(decimalNum);
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 decimalNum;
printf("请输入一个十进制数: ");
scanf("%d", &decimalNum);
printf("二进制表示为: ");
decimalToBinaryRecursive(decimalNum);
printf("\n");
return 0;
}
方法4:使用标准库函数(C99及以上)
#include <stdio.h>
#include <limits.h> // 用于CHAR_BIT
void decimalToBinaryStd(int num) {
char binaryStr[CHAR_BIT * sizeof(num) + 1]; // +1 for null terminator
// 使用itoa函数(非标准,但常见)
// 或者使用sprintf
sprintf(binaryStr, "%d", num);
printf("二进制表示为: %s\n", binaryStr);
}
int main() {
int decimalNum;
printf("请输入一个十进制数: ");
scanf("%d", &decimalNum);
decimalToBinaryStd(decimalNum);
return 0;
}
注意事项
- 方法1和方法2是最常用的,方法2利用位运算效率更高
- 方法3递归实现简洁,但对于大数可能导致栈溢出
- 方法4中的
itoa不是标准C函数,不同编译器可能支持不同 - 对于负数,上述代码需要额外处理(通常使用补码表示)
如果需要处理负数,可以修改方法1如下:
void decimalToBinarySigned(int num) {
unsigned int unum; // 使用无符号数处理负数
if (num < 0) {
unum = (unsigned int)(~num) + 1; // 补码表示
printf("-");
} else {
unum = num;
}
if (unum == 0) {
printf("0");
return;
}
int binaryNum[32];
int i = 0;
while (unum > 0) {
binaryNum[i] = unum % 2;
unum = unum / 2;
i++;
}
for (int j = i - 1; j >= 0; j--) {
printf("%d", binaryNum[j]);
}
}
(图片来源网络,侵删)
