开发者

C++使用printf语句实现进制转换的示例代码

目录
  • 一、printf 原生支持的进制转换
    • 1. 十进制、八进制、十六进制转换
    • 2. 显示进制前缀
    • 3. 指定输出宽度和填充
  • 二、printf 不支持的进制转换
    • 1. 二进制输出(需要手动实现)
    • 2. 任意进制转换(通用方法)
  • 三、输入其他进制的数值(scanf 的用法)
    • 四、注意事项

      在C语言中,printf 函数可以直接实现部分进制转换功能,通过格式说明符(format specifier)快速输出不同进制的数值。以下是详细使用方法及示例代码:

      一、printf 原生支持的进制转换

      1. 十进制、八进制、十六进制转换

      #include <stdio.h>
      int main() {
          int num = 255;
          // 十进制输出(默认)
          pandroidrintf("十进制: %d\n", num); php // 255
          // 八进制输出(无前缀)
          printf("八进制: %o\n", num);  // 377
          // 十六进制输出(小写字母)
          printf("十六进制: %x\n", num); // ff
          // 十六进制输出(大写字母)
          printf("十六进制: %X\n", num); // FF
          return 0;
      }

      2. 显示进制前缀

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

      3. 指定输出宽度和填充

      #include <stdio.h>
      int main() {
          int num = 15;
          // 输出8位宽度,不足部分补前导零
          printf("补零的编程客栈八进制: %#08o\n", num);  // 0000017
          printf("补零的十六进制: %#08x\n", num); // 0x00000f
          return 0;
      }

      二、printf 不支持的进制转换

      1. 二进制输出(需要手动实现)

      #include <stdio.h>
      void print_binary(unsigned inhttp://www.devze.comt 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;
      }

      2. 任意进制转换(通用方法)

      #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[] = "0123456789pFaCSNABCDEFGHIJKLMNOPQRSTUVWXYZ";
          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;
      }

      三、输入其他进制的数值(scanf 的用法)

      #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++ 进制转换内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

      0

      上一篇:

      下一篇:没有了

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新开发

      开发排行榜