首页 > 后端开发 > C++ > C 中的整数:一点历史

C 中的整数:一点历史

Mary-Kate Olsen
发布: 2025-01-01 09:12:11
原创
233 人浏览过

Integers in C: A Bit of History

整数是计算中最基本的数据结构——如果我们甚至可以称它们为“结构”的话。作为程序员,我们的工作就是赋予这些数字以意义。无论软件多么复杂:最终它只是一个整数,而你的处理器只能理解整数。

如果我们需要负数,我们发明了二进制补码。如果我们需要小数,我们会创建一种科学记数法,然后——砰——我们就有了一个浮点数。归根结底,还是无法逃避零和一。


整数的小历史

C中,int几乎是自然类型。尽管编译器可能会抱怨,但到处都有一些标志,大多数都会允许你写这样的东西:

main(void) {
    return 0;
}
登录后复制

从技术上讲,这与:

int main(void) {
    return 0;
}
登录后复制

这种行为来自于当时的常识:如果程序员没有指定类型,则默认为整数是合理的。

C 的设计就是考虑到了这个想法。最初,int 没有标准大小。 PDP-11 处理器(最初创建 C 的机器)使用 16 位寻址。因此,我们假设 int 也是 16 位才有意义。这个想法是,int 的大小会随着处理器的发展而增长。

神秘的尺寸

这种方法产生了一些问题。如果 int 的大小因平台而异,则为不同处理器编译的程序的行为可能会有所不同。这打破了 C 是一种“不可知论”语言可以编译成不同架构的想法。

与 int 不同,例如,char 始终具有明确定义的大小:8 位,有符号。尽管有它的名字,char 并不是文本字符的抽象类型。它只是一个 8 位数字。例如,文字“a”在编译时转换为数字 97,简单明了。

其他类型呢,比如短的和长的?这个想法很简单:

short <= int <= long
登录后复制

编译器实现者可以完全自由地决定具体大小。

ANSI C (1989) 带来了一些秩序

根据ANSI C标准,建立了一些规则:

  • 字符:至少 8 位
  • 短:至少 16 位
  • int:short 或更大的大小(16 或 32 位)
  • 长:至少 32 位

这个组织有所帮助,但至少可以说 int 的大小仍然令人困惑。 C99 标准引入了 stdint.h 标头,情况有所改善。

现在我们有固定大小的类型:

  • int8_t:8 位
  • int16_t:16位
  • int32_t:32位
  • int64_t:64位

从那时起,编译器就需要用固定大小的类型来实现这个头。


整数的当前状态

如今,使用 GCCClang 等现代编译器,大小更加可预测:

Type Size
char 8 bits
short 16 bits
int 32 bits
long 64 bits (32 bits on 32-bit systems)
long long 64 bits

虽然long long还是有些奇特,但至少带来了一些一致性(说实话,我什至觉得long long很时尚)。


该怎么办?

今天,我们已经配备了像 stddef.h 和 stdint.h 这样的标头。仅在必要时使用 int,例如 main 函数的返回类型。对于原型之外的任何内容,最好使用 stdint.h 中的固定大小整数,对于数组索引或循环,请使用 stddef.h 中的 size_t。我希望这能让您免去一些麻烦。

感谢您坚持到这里 — 下次见!

以上是C 中的整数:一点历史的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板