C语言实现十进制转二进制函数
以下是一个将十进制整数转换为二进制字符串的C语言函数实现:
使用数组存储二进制位
#include <stdio.h>
#include <stdlib.h>
// 函数声明
char* decimalToBinary(int num);
int main() {
int decimalNum;
printf("请输入一个十进制整数: ");
scanf("%d", &decimalNum);
char* binaryStr = decimalToBinary(decimalNum);
printf("二进制表示为: %s\n", binaryStr);
free(binaryStr); // 释放动态分配的内存
return 0;
}
// 十进制转二进制函数
char* decimalToBinary(int num) {
// 处理0的特殊情况
if (num == 0) {
char* result = (char*)malloc(2 * sizeof(char));
result[0] = '0';
result[1] = '\0';
return result;
}
// 计算二进制位数
int temp = num;
int count = 0;
while (temp != 0) {
temp >>= 1;
count++;
}
// 分配内存(包括符号位和终止符)
char* binaryStr = (char*)malloc((count + 1) * sizeof(char));
if (binaryStr == NULL) {
printf("内存分配失败\n");
exit(1);
}
// 填充二进制字符串
int index = count - 1;
binaryStr[count] = '\0'; // 字符串终止符
while (num != 0) {
binaryStr[index--] = (num & 1) ? '1' : '0';
num >>= 1;
}
return binaryStr;
}
递归实现
#include <stdio.h>
// 递归函数声明
void decimalToBinaryRecursive(int num);
int main() {
int decimalNum;
printf("请输入一个十进制整数: ");
scanf("%d", &decimalNum);
printf("二进制表示为: ");
if (decimalNum == 0) {
printf("0");
} else {
decimalToBinaryRecursive(decimalNum);
}
printf("\n");
return 0;
}
// 递归实现十进制转二进制
void decimalToBinaryRecursive(int num) {
if (num > 1) {
decimalToBinaryRecursive(num >> 1);
}
printf("%d", num & 1);
}
使用标准库函数
#include <stdio.h>
#include <limits.h>
char* decimalToBinary(int num) {
static char buffer[CHAR_BIT * sizeof(int) + 1]; // 足够存储int的所有位
int i = sizeof(int) * CHAR_BIT - 1; // 从最高位开始
buffer[sizeof(int) * CHAR_BIT] = '\0'; // 字符串终止符
if (num == 0) {
buffer[i--] = '0';
} else {
for (; i >= 0; i--) {
buffer[i] = (num & 1) ? '1' : '0';
num >>= 1;
}
}
return buffer;
}
int main() {
int decimalNum;
printf("请输入一个十进制整数: ");
scanf("%d", &decimalNum);
printf("二进制表示为: %s\n", decimalToBinary(decimalNum));
return 0;
}
注意事项
- 方法一和方法三需要手动管理内存(方法三使用静态数组,但要注意函数返回的指针只在当前调用有效)
- 方法二不需要额外内存,但递归深度可能受限
- 所有方法都处理了0的特殊情况
- 对于负数,这些方法会输出其二进制补码表示
- 如果需要处理负数并显示符号,可以修改函数增加符号位处理
您可以根据具体需求选择最适合的实现方式。
