c语言 十进制转二进制 函数

99ANYc3cd6
预计阅读时长 10 分钟
位置: 首页 C语言 正文

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;
}

注意事项

  1. 方法一和方法三需要手动管理内存(方法三使用静态数组,但要注意函数返回的指针只在当前调用有效)
  2. 方法二不需要额外内存,但递归深度可能受限
  3. 所有方法都处理了0的特殊情况
  4. 对于负数,这些方法会输出其二进制补码表示
  5. 如果需要处理负数并显示符号,可以修改函数增加符号位处理

您可以根据具体需求选择最适合的实现方式。

-- 展开阅读全文 --
头像
dede文章页如何精准判断当前栏目ID?
« 上一篇 02-11
dede手机模板链接如何正确设置与优化?
下一篇 » 02-11
取消
微信二维码
支付宝二维码

目录[+]