<分区>
C、C++、C#、Java、Rust 等默认都对 int
进行了签名。大多数时候你需要无符号的变量,因为你必须表示小于零的东西的情况比处理自然数的情况要少。此外,无符号变量 不必以 2 的补码形式进行编码,并且它们的最高有效位可用于额外的值范围。
考虑到所有这些,为什么语言的创造者会让整数默认签名?
<分区>
C、C++、C#、Java、Rust 等默认都对 int
进行了签名。大多数时候你需要无符号的变量,因为你必须表示小于零的东西的情况比处理自然数的情况要少。此外,无符号变量 不必以 2 的补码形式进行编码,并且它们的最高有效位可用于额外的值范围。
考虑到所有这些,为什么语言的创造者会让整数默认签名?
最佳答案
我认为您的基本说法是错误的。负数在现实生活中很常见。想一想温度、银行账户余额、SO 问答分数……在计算中对物理数据建模需要一种自然的方式来表达负数。
事实上,Brian Kernighan 和 Dennis Ritchie 在 The C Programming Language 中的第二个示例是一个在华氏度和摄氏度之间转换温度的程序。这是他们使用 C 语言进行数值应用的第一个示例。
数组大小确实是正数,但指针偏移量在 C 中可能是负数。
Ada 等其他语言指定了数值变量的范围,但算术计算仍然假设在 0
处连续,并且暗含负数。
C 中指定的无符号算术实际上令人困惑:1U - 2U
大于 0
,就像 -1U
一样。将其设置为默认值太违反直觉了!
关于c - 为什么 int 类型的变量在许多语言中默认是有符号的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34238862/