整数是计算中最基本的数据结构——如果我们甚至可以称它们为“结构”的话。作为程序员,我们的工作就是赋予这些数字以意义。无论软件多么复杂:最终它只是一个整数,而你的处理器只能理解整数。
如果我们需要负数,我们发明了二进制补码。如果我们需要小数,我们会创建一种科学记数法,然后——砰——我们就有了一个浮点数。归根结底,还是无法逃避零和一。
整数的小历史
在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 <p>编译器实现者可以完全自由地决定具体大小。</p> <h3> ANSI C (1989) 带来了一些秩序 </h3> <p>根据<strong>ANSI C</strong>标准,建立了一些规则:</p>
- 字符:至少 8 位
- 短:至少 16 位
- int:short 或更大的大小(16 或 32 位)
- 长:至少 32 位
这个组织有所帮助,但至少可以说 int 的大小仍然令人困惑。 C99 标准引入了 stdint.h 标头,情况有所改善。
现在我们有固定大小的类型:
- int8_t:8 位
- int16_t:16位
- int32_t:32位
- int64_t:64位
从那时起,编译器就需要用固定大小的类型来实现这个头。
整数的当前状态
如今,使用 GCC 和 Clang 等现代编译器,大小更加可预测:
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中文网其他相关文章!

本文解释了C标准模板库(STL),重点关注其核心组件:容器,迭代器,算法和函子。 它详细介绍了这些如何交互以启用通用编程,提高代码效率和可读性t

本文详细介绍了c中有效的STL算法用法。 它强调了数据结构选择(向量与列表),算法复杂性分析(例如,std :: sort vs. std vs. std :: partial_sort),迭代器用法和并行执行。 常见的陷阱

本文讨论了C中的动态调度,其性能成本和优化策略。它突出了动态调度会影响性能并将其与静态调度进行比较的场景,强调性能和之间的权衡

本文详细介绍了C中的有效异常处理,涵盖了尝试,捕捉和投掷机制。 它强调了诸如RAII之类的最佳实践,避免了不必要的捕获块,并为强大的代码登录例外。 该文章还解决了Perf

C 20范围通过表现力,合成性和效率增强数据操作。它们简化了复杂的转换并集成到现有代码库中,以提高性能和可维护性。

本文讨论了使用C中的移动语义来通过避免不必要的复制来提高性能。它涵盖了使用std :: Move的实施移动构造函数和任务运算符,并确定了关键方案和陷阱以有效

文章讨论了在C中有效使用RVALUE参考,以进行移动语义,完美的转发和资源管理,重点介绍最佳实践和性能改进。(159个字符)


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver Mac版
视觉化网页开发工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3汉化版
中文版,非常好用

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。