跳到主要内容

编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数 ?

参考答案:

在C语言中,如果不能使用printf系列库函数来输出二进制和十六进制,我们可以使用位运算和自定义的算法来手动实现这一功能。

以下是一个简单的示例代码,演示了如何将一个long型十进制数分别转换成二进制和十六进制,并以字符串的形式输出:

#include <stdio.h>
#include <string.h>

void decToBin(long num, char *bin) {
    int i = 0;
    do {
        bin[i++] = (num & 1) + '0';
    } while ((num >>= 1) != 0);
    bin[i] = '\0';

    // 反转字符串,因为我们是从低位到高位生成的
    for (int j = 0; j < i / 2; j++) {
        char temp = bin[j];
        bin[j] = bin[i - j - 1];
        bin[i - j - 1] = temp;
    }
}

void decToHex(long num, char *hex) {
    const char hexChars[] = "0123456789ABCDEF";
    int i = 0;
    do {
        hex[i++] = hexChars[num & 0xF];
    } while ((num >>= 4) != 0);
    hex[i] = '\0';

    // 反转字符串,因为我们是从低位到高位生成的
    for (int j = 0; j < i / 2; j++) {
        char temp = hex[j];
        hex[j] = hex[i - j - 1];
        hex[i - j - 1] = temp;
    }
}

int main() {
    long num = 265; // 示例数字
    char bin[65]; // 足够存储64位long的二进制表示
    char hex[17]; // 足够存储64位long的十六进制表示

    decToBin(num, bin);
    decToHex(num, hex);

    // 输出二进制和十六进制形式
    puts("Binary: ");
    for (int i = 0; bin[i] != '\0'; i++) {
        putchar(bin[i]);
    }
    putchar('\n');

    puts("Hexadecimal: ");
    for (int i = 0; hex[i] != '\0'; i++) {
        putchar(hex[i]);
    }
    putchar('\n');

    return 0;
}

这段代码定义了两个函数decToBindecToHex,分别用于将十进制数转换成二进制和十六进制形式。main函数中给出了一个示例数字265,并调用这两个函数将其转换成二进制和十六进制,然后手动使用putchar函数输出。注意,这里我们假设long类型是64位的,因此为二进制和十六进制字符串分配了足够的空间。如果long类型在你的平台上是32位的,你需要相应地调整数组的大小。