int
默认情况下,C,C++,C#,Java,Rust等已签名.大多数时候你需要无符号变量,因为你必须表示低于零的东西的情况比处理自然数的情况要少.无符号变量也不必以2的补码形式编码,并且对于额外的值范围,它们具有最高有效位.
考虑到所有这些因素,为什么语言创建者会默认签名?
我认为你的基本要求是错误的.负数在现实生活中非常普遍.想想温度,银行账户余额,SO问题和答案分数......在计算中建模物理数据需要一种表达负数量的自然方式.
事实上,Brian Kernighan和Dennis Ritchie 的C编程语言中的第二个例子是一个转换华氏温度和Celcius量表之间温度的程序.这是他们C语言数字应用程序的第一个例子.
数组大小确实是正数,但指针偏移在C中可能是负数.
其他语言(如Ada)指定数值变量的范围,但算术计算仍假定为连续性,0
并且此隐含负数.
C中指定的无符号算术实际上令人困惑:1U - 2U
大于0
,就像-1U
.将其设为默认值会非常直观!