c - 为什么 int 类型的变量在许多语言中默认是有符号的?

标签 c int programming-languages unsigned signed

<分区>

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/

相关文章:

c# - 使用 C# 确定输入到文本框中的字符数

types - 用于类型推断的 OCaml LET REC 键入规则

c - 为什么我们不能使用 C 中的表达式为全局变量赋值?

java - java中char数组到int数组转换产生空指针异常

c - 从 C 样式字符串问题中删除 C 样式注释的函数

java - Java 中的类型转换是如何工作的?

sql - 在棕地应用程序中实现单元测试的首要任务是什么?

c# - lambda 中的 Alpha 转换

c - mmap 返回 'No such file or directory'

c - 多字符字符常量 [-Werror,-Wmultichar]