pax*_*blo 15
就标准而言(因为您的问题被标记signed为此标记),被标记为默认值,因为它与标准之前的C实现的方式相同.
最初的ANSI/ISO标准要求是编纂现有的实践,而不是创建一种新的语言.因此,根据基本原理文档,预标准实现的行为是最重要的因素:
最初的X3J11章程明确要求编纂共同的现行做法,而C89委员会在任何明确和明确的地方都坚持先例.
C89定义的绝大多数语言与Brian Kernighan和Dennis Ritchie在C语言编程语言第一版的附录A中所定义的完全相同,并且在当时几乎所有C语言翻译器中都实现了.(以下将该文件称为K&R.)
如果您正在寻找预标准实现首选的原因signed,您可能需要研究最初开发UNIX和C的PDP-n机器的体系结构.
C的历史页面显示,这unsigned实际上是该语言的一个相对较晚的人,出现在70年代中期的某个时候:
在1973-1980期间,语言增长了一点:类型结构获得了无符号,长,联合和枚举类型,并且结构变成了几乎一流的对象(缺少文字符号).
它主要是向后兼容性,而C语言来自早期语言,它们不能轻易支持有符号和无符号整数.
C源自一种名为B的旧语言,它来自一种更老的语言,称为BCPL(它是CPL的简化版本).
BCPL是一种基本上无类型的语言.变量声明没有指定对象的类型; 相反,对给定变量的操作会将其视为给定类型.
在BCPL运营商+,-,*,/,和REM对待自己的操作数为签署整数,并取得整数结果.
如果BCPL支持无符号整数,那么要么必须有另一组运算符无符号操作数,要么它根本不能代表负数.(请注意,BCPL不支持浮点.)
B的语法与BCPL完全不同(并且更接近于C),但它保留了许多相同的语义.特别是,变量和函数默认为整数类型 - 并且没有unsigned关键字.
早期的C,基于B,也没有unsigned关键字.它只有四个基本的数字类型:char,int,float,和double.(unsigned加入,随着long,union以及enum,1973年和1980年之间的某个时间),由于语言的弱类型性质,程序员有时候使用指针时,他们需要无符号运算.
没有声明类型的实体隐含类型的"特征" int保留在C中,直到1999 ISO标准最终删除了"隐式int"规则.
此外,有符号整数类型往往比无符号类型更有用.表示负值的能力非常方便.给定典型的环绕语义,两个小值的无符号减法中的错误可以产生巨大的正值(3 - 4 == 65535例如,对于16位无符号类型).即使在作为所有这些语言的主要目标的系统编程领域中,有时也需要表示负值(例如,某些数量的变化).
参考文献: