You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中十进制、十六进制整数常量是值还是值的表示方式?

核心结论

十进制、十六进制整数常量是值的不同表示方式,不是值本身。

C标准中,整数常量的书写格式只是程序员用来指定目标值的语法糖,编译阶段就会被解析为对应的抽象整数值:比如 123 和 0x7B 只是写法不同,指向的是完全相同的整数值,和最终运行时的实际存储无关。这也符合《Modern C》中提到的设计思路:

计算机上的值的表示可能因架构不同存在“文化差异”,也可能由程序员为值指定的类型决定。因此,如果想要编写可移植代码,我们应主要围绕值本身而非其表示进行推导。


不同架构下整数值的常见表示差异

同一整数值在不同硬件架构上的底层存储会有明显区别,常见差异包括:

  • 端序(字节序)差异:多字节整数的字节存储顺序不同。比如16位整数值 0x1234,大端架构存储为字节序列 0x12 0x34,小端架构存储为 0x34 0x12,32/64位整数也遵循对应架构的端序规则。
  • 整数宽度差异:基础整数类型的位宽随架构变化。比如常量 0xFFFF,在 int 为16位的老旧嵌入式架构中属于有符号整数的最大值,在 int 为32位的x86/ARM主流架构中只是普通的正整数,还会因为类型推导规则匹配到不同的整数类型。
  • 有符号数编码差异:有符号整数的编码规则不同。目前主流架构统一使用补码编码,值 -1 的32位表示为 0xFFFFFFFF;极少数老旧架构使用原码/反码编码,同一个 -1 的32位表示会对应为 0x80000001 或 0xFFFFFFFE。
  • 内存对齐差异:部分架构要求整数必须按位宽对齐存储,比如32位整数必须存放在4字节对齐的内存地址,非对齐访问会直接触发硬件异常;其余架构允许非对齐访问,但访问性能会明显下降。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:36:08