30人参与 • 2025-04-18 • C/C++
在c语言中,printf
函数可以直接实现部分进制转换功能,通过格式说明符(format specifier)快速输出不同进制的数值。以下是详细使用方法及示例代码:
#include <stdio.h> int main() { int num = 255; // 十进制输出(默认) printf("十进制: %d\n", num); // 255 // 八进制输出(无前缀) printf("八进制: %o\n", num); // 377 // 十六进制输出(小写字母) printf("十六进制: %x\n", num); // ff // 十六进制输出(大写字母) printf("十六进制: %x\n", num); // ff return 0; }
#include <stdio.h> int main() { int num = 255; // 显示八进制前缀 0 printf("带前缀的八进制: %#o\n", num); // 0377 // 显示十六进制前缀 0x/0x printf("带前缀的十六进制: %#x\n", num); // 0xff printf("带前缀的十六进制: %#x\n", num); // 0xff return 0; }
#include <stdio.h> int main() { int num = 15; // 输出8位宽度,不足部分补前导零 printf("补零的八进制: %#08o\n", num); // 0000017 printf("补零的十六进制: %#08x\n", num); // 0x00000f return 0; }
#include <stdio.h> void print_binary(unsigned int num) { if (num > 1) print_binary(num >> 1); putchar((num & 1) ? '1' : '0'); } int main() { int num = 10; printf("二进制: "); print_binary(num); // 1010 return 0; }
#include <stdio.h> #include <string.h> void reverse(char* str) { int len = strlen(str); for (int i = 0; i < len/2; i++) { char temp = str[i]; str[i] = str[len-1 - i]; str[len-1 - i] = temp; } } void dec_to_base(unsigned int num, int base, char* output) { if (base < 2 || base > 36) { strcpy(output, "invalid base"); return; } const char digits[] = "0123456789abcdefghijklmnopqrstuvwxyz"; int index = 0; do { output[index++] = digits[num % base]; num /= base; } while (num > 0); output[index] = '\0'; reverse(output); } int main() { char buffer[32]; dec_to_base(255, 2, buffer); printf("二进制: %s\n", buffer); // 11111111 return 0; }
#include <stdio.h> int main() { int num; // 输入十六进制数(如 ff) printf("输入十六进制数: "); scanf("%x", &num); printf("十进制值: %d\n", num); // 255 // 输入八进制数(如 377) printf("输入八进制数: "); scanf("%o", &num); printf("十进制值: %d\n", num); // 255 return 0; }
类型限制:
使用 %o
, %x
, %x
时,建议用 unsigned
类型,避免符号扩展问题:
unsigned int num = 255; printf("%#x\n", num); // 正确输出 0xff
二进制输出优化:
// 使用宏定义快速输出二进制 #define print_binary(n) \ for (int i = sizeof(n)*8-1; i >= 0; i--) \ putchar((n & (1 << i)) ? '1' : '0'); \ putchar('\n') int main() { print_binary(10); // 00000000000000000000000000001010 return 0; }
大数处理:
unsigned int
范围的数值,需使用字符串处理(类似 python 的 int(string, base)
)。通过 printf
可以直接实现八进制、十六进制的输出,二进制和其他进制需要手动实现。若需更复杂的进制转换(如浮点数转换或超大数处理),需结合字符串操作或数学库函数。
到此这篇关于c++使用printf语句实现进制转换的示例代码的文章就介绍到这了,更多相关c++ 进制转换内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论