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