C语言10进制转二进制怎么实现?

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

C语言实现十进制转二进制

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

c语言10进制转二进制
(图片来源网络,侵删)

方法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. 方法1和方法2是最常用的,方法2利用位运算效率更高
  2. 方法3递归实现简洁,但对于大数可能导致栈溢出
  3. 方法4中的itoa不是标准C函数,不同编译器可能支持不同
  4. 对于负数,上述代码需要额外处理(通常使用补码表示)

如果需要处理负数,可以修改方法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]);
    }
}
c语言10进制转二进制
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
织梦列表页如何调用好评数据?
« 上一篇 04-30
dede后台空白是什么原因导致的?
下一篇 » 04-30
取消
微信二维码
支付宝二维码

目录[+]