You need to enable JavaScript to run this app. 使用printf打印十六进制数值时输入被识别为十进制的原因是什么?
优惠活动
大模型
产品
解决方案
定价
更多

使用printf打印十六进制数值时输入被识别为十进制的原因是什么?

printf 格式说明符与数值字面量的进制规则说明
  • 首先要明确两个完全独立的规则:数值字面量的解析规则、printf 格式说明符的作用,二者互不干扰:
    • 数值字面量的进制仅由书写语法决定,编译阶段就已经完成解析:
      • 无前缀的数字,C 语言默认识别为十进制数
      • 前缀加0x/0X的数字,才会被识别为十六进制数
      • 前缀加0的数字,会被识别为八进制数
        你示例中写的16没有任何前缀,编译器会直接把它解析为十进制的16,对应内存中存储的二进制值就是00010000,这个值在编译完成后就已经固定,和后续用什么方式打印没有任何关系。
  • printf 的格式说明符只决定输出时的进制转换逻辑,不会修改原始存储的数值:
    • %d:把内存中的二进制值转为十进制字符串输出
    • %x:把内存中的二进制值转为小写十六进制字符串输出
    • %X:把内存中的二进制值转为大写十六进制字符串输出
      你示例中用%x打印十进制16对应的二进制值,转换为十六进制后就是10,属于符合预期的正确输出。

如果希望输出十六进制的16,可以使用以下两种写法:

// 写法1:传入十六进制0x16对应的十进制值22
printf("%x", 22);
// 写法2:直接用十六进制语法写字面量,可读性更高
printf("%x", 0x16);

以上两种写法执行后都会输出16。

内容的提问来源于stack exchange,提问作者Muneesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 20:54:04