同一平台上有符号整数的不同表示相关技术问询
C标准与有符号整数表示的相关问题解答
1. C标准的规定
C标准并没有隐含要求同一编译实现里的所有有符号整数类型必须采用同一种表示方式。标准允许有符号整数使用**原码、一补码(反码)、二补码(补码)**中的任意一种,只要满足标准对有符号整数的行为约束(比如有符号整数溢出属于未定义行为)。所以从标准层面来说,完全允许同一机器上的int用一补码、long int用二补码,这种实现并不违反C标准。
2. 硬件层面的情况
确实存在支持多种有符号整数表示的硬件:
- 早期的部分大型机(比如IBM System/360的部分型号)的指令集同时支持补码和原码/反码运算,允许不同长度的整数使用不同的符号表示。
- 少数嵌入式处理器也可能针对不同数据宽度的整数设计不同的符号表示逻辑,不过这类设计在现代主流硬件里已经很少见了——统一用二补码能大幅简化硬件设计和编译器的实现流程。
内容的提问来源于stack exchange,提问作者Some Old Jaded Guy
相关产品推荐
相关产品推荐

