C 中的整数:一点历史

c 中的整数:一点历史

整数是编程中最基础的数据类型,堪称编程的基石。程序员的工作就是赋予这些数字意义,无论软件多么复杂,最终都归结于整数运算,因为处理器只理解整数。

为了表示负数,我们引入了二进制补码;为了表示小数,我们创造了科学计数法,于是有了浮点数。但归根结底,一切仍然离不开0和1。

整数的简史

在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,简单明了。

其他类型,例如shortlong呢?其大小由编译器决定:

short  // 编译器自行决定大小long   // 编译器自行决定大小

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

ANSI C (1989) 带来的规范

ANSI C标准制定了一些规则:

char:至少8位short:至少16位int:至少与short一样大(16位或32位)long:至少32位

这带来了一定的规范,但int的大小仍然不够清晰。C99标准引入了头文件,情况有所改善。

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

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

从此以后,编译器必须使用固定大小的类型来实现这个头文件。

整数的现状

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

类型 大小

char8 bitsshort16 bitsint32 bitslong64 bits (32位系统上为32位)long long64 bits

尽管long long仍然有些特殊,但至少带来了一致性(老实说,我觉得long long很酷)。

最佳实践

现在我们有了这样的头文件。只在必要时使用int,例如main函数的返回类型。对于其他情况,最好使用中固定大小的整数类型;对于数组索引或循环计数,请使用中的size_t。希望这些建议能帮助你避免一些麻烦。

感谢您的阅读!

以上就是C 中的整数:一点历史的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1461243.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月18日 13:10:25
下一篇 2025年12月18日 13:10:45

相关推荐

  • CS-第 3 周

    算法是解决问题的指令集,其执行速度和内存占用各不相同。编程中,许多算法都基于数据搜索和排序。本文将介绍几种数据检索和排序算法。 线性搜索 假设有一个数组 [20, 500, 10, 5, 100, 1, 50],需要查找数字 50。线性搜索算法会逐个检查数组中的每个元素,直到找到目标值或遍历完整个数…

    2025年12月18日 好文分享
    000
  • c语言函数的定义调用声明格式怎么搞

    C语言函数包含定义、调用和声明。函数定义指定函数名、参数和返回类型,函数体实现功能;函数调用执行函数并提供参数;函数声明告知编译器函数类型。值传递用于参数传递,注意返回类型,保持一致的代码风格,并在函数中处理错误。掌握这些知识有助于编写优雅、健壮的C代码。 C语言函数:定义、调用与声明的那些事儿 你…

    2025年12月18日
    000
  • c语言函数的定义和调用一览

    C语言函数定义包括指定返回值类型、函数名、参数列表和函数体。调用函数只需用函数名加上参数。参数传递默认按值传递,指针参数除外。函数原型声明函数信息,提高可读性。递归函数自调用,需有终止条件。性能优化可使用内联函数或宏定义减少函数调用开销。 C语言函数:定义与调用,那些你可能不知道的细节 很多初学者觉…

    2025年12月18日
    000
  • c语言函数定义和调用的规则是什么

    C语言函数由参数列表、函数体、返回值类型和函数名组成。函数调用时,参数通过值传递机制复制给函数,不会影响外部变量。指针传递则直接传递内存地址,修改指向的内容会影响外部变量。函数原型声明用于告知编译器函数签名,避免编译错误。栈空间用于存储函数局部变量和参数,过多递归或占用空间过大可导致栈溢出。 C语言…

    2025年12月18日
    000
  • c语言函数指针和指针函数是什么?有什么区别?

    函数指针是指向函数的指针,而指针函数是返回指针的函数。函数指针指向函数,用于选择和执行不同的函数;指针函数返回指针,指向变量、数组或其他函数;使用函数指针要注意参数匹配和检查指针空值;使用指针函数要注意内存管理,释放动态分配的内存;理解两者的区别和特性,避免混淆和错误。 C语言函数指针和指针函数,乍…

    2025年12月18日
    000
  • c语言函数定义格式有哪些

    C语言函数定义的关键元素包括:返回类型(定义函数返回的值)、函数名(遵循命名规范,决定作用域)、参数列表(定义函数接受的参数类型、数量和顺序)和函数体(实现函数的逻辑)。明确这些元素的意义和微妙关系至关重要,能帮助开发者避免“坑”,编写更高效、更优雅的代码。 C语言函数定义:那些你可能不知道的细节 …

    2025年12月18日
    000
  • c语言函数括号里面指针参数有哪些?

    C 语言函数的指针参数直接操作调用者传递的内存区域,包括指向整数、字符串或结构体的指针。使用指针参数时,需要谨慎修改指针指向的内存,以避免出错或内存问题。对于指向字符串的双重指针,修改指针本身会导致指向新字符串,需要注意内存管理。处理指向结构体或数组的指针参数时,则需要仔细检查指针类型和边界以避免越…

    2025年12月18日
    000
  • 如何用c语言函数指针求一维数组最大值教程

    函数指针的灵活应用:利用比较函数寻找数组最大值。首先,定义比较函数类型 CompareFunc,再编写比较函数 compareMax(a, b)。findMax 函数接受数组、数组大小和比较函数参数,使用比较函数循环比较数组元素找到最大值。这种方法代码可复用性强,体现高阶编程思想,有利于解决更复杂问…

    2025年12月18日
    000
  • c语言函数指针作为返回值怎么用

    函数指针可以作为返回值,实现根据不同输入返回不同函数的机制。通过定义函数类型并根据选择返回相应的函数指针,可以实现动态调用函数,增强代码的灵活性。但要注意函数指针类型的定义、异常处理和内存管理,以确保代码的稳健性。 C语言函数指针返回值:玩转代码的终极奥义 你是否想过,函数也能像变量一样,被当作返回…

    2025年12月18日
    000
  • c语言函数库在什么位置?c语言函数库怎么添加?

    C语言函数库是一个包含各种函数的工具箱,这些函数被组织在不同的库文件中。添加函数库需要通过编译器的命令行选项来指定,例如 GCC 编译器使用 -l 选项,后跟库名的缩写。如果库文件不在默认搜索路径下,则需要使用 -L 选项指定库文件路径。库有静态库和动态库之分,静态库在编译时直接链接到程序中,而动态…

    2025年12月18日
    000
  • c语言函数返回指针输出的什么

    C语言函数返回指针输出一个内存地址,其指向内容取决于函数内部的操作,可能指向局部变量(需谨慎,函数结束后内存已释放)、动态分配的内存(需用malloc分配,free释放)、或全局变量。 C语言函数返回指针:迷雾中的指针 你问C语言函数返回指针输出什么?这问题问得妙啊,表面简单,实则暗藏玄机,牵扯到内…

    2025年12月18日
    000
  • 爱心代码编程c语言公式分享

    用C语言绘制爱心最常见的方法是利用数学公式,核心是找到描述心形曲线的数学方程。例如,一个常用的参数方程为:x = 16 sin(t)^3,y = 13 cos(t) – 5 cos(2 t) – 2 cos(3 t) – cos(4 * t)。通过参数t的变化,可…

    2025年12月18日
    000
  • 爱心符号 c++爱心跳动代码分享

    用C++代码绘制跳动爱心,通过循环不断改变心形大小和位置,配合ClearDevice()清除屏幕,就能让爱心模拟出跳动效果。采用EasyX图形库,利用正弦函数控制变化以模拟跳动,但需要减少ClearDevice()调用次数并合理设置延时参数。该代码可作为基础,通过定制颜色、特效和旋转等进一步完善。同…

    2025年12月18日
    000
  • 爱心代码编程c++语言简单教程

    使用C++绘制爱心需要借助图形库,但本文介绍了一种简单方法:在控制台中利用星号字符的巧妙输出。通过嵌套循环和数学公式x x + y y – 1和value value value – x x y y y 爱心代码:C++ 入门小记 你问怎么用C++写出“爱心”?其实,这不仅仅…

    2025年12月18日
    000
  • c语言函数返回值类型由什么决定

    函数返回值类型由函数定义时指定的返回类型决定,常见类型包括 int、float、char 和 void(表示不返回任何值)。返回值类型与函数体中实际返回的值必须一致,否则会引发编译器错误或不可预测的行为。返回指针时,必须确保指针指向有效内存,否则可能导致段错误。处理返回值类型时,需要考虑错误处理和资…

    2025年12月18日
    000
  • c语言函数指针详解怎么写 c语言函数指针写法教程

    函数指针是指向函数的指针,可实现代码灵活性。其声明语法为:typedef 返回值 (*函数指针类型)(参数类型1, 参数类型2, …); 常见应用包括回调函数和函数表。使用时应注意指针有效性和类型匹配,否则可能导致崩溃或错误。熟练运用函数指针可提升代码效率和优雅性。 函数指针:C语言的灵…

    2025年12月18日
    000
  • c语言函数调用的三种方式是哪三种?

    C语言函数调用有三种方式:直接调用(编译器嵌入函数地址)、指针调用(通过指针间接调用)和函数指针调用(将函数指针作为参数传递)。 C语言函数调用的三种方式?这个问题问得有点太表面了,其实背后藏着不少门道。简单来说,就是直接调用、指针调用和函数指针调用。但这只是最粗浅的分类,真正理解还得深入到内存模型…

    2025年12月18日
    000
  • c语言函数返回值是什么意思?由什么决定?

    C 语言函数返回值: 函数执行完成后返回给调用代码的数据,类型由函数定义确定。1. 返回类型决定于函数声明中的指定;2. 函数执行结果通过返回值途径送出;3. 返回类型与返回语句返回类型必须匹配;4. 忘记或错误设置返回值类型,或未使用返回语句都会导致错误;5. 返回值类型应清晰明确,提高代码可读性…

    2025年12月18日
    000
  • c语言函数声明放在什么位置

    函数声明应在函数使用之前,相同源文件内应放置在函数定义前,不同源文件内应放在头文件中,头文件中需使用宏定义防止重复包含,保证代码风格清晰简洁。 C语言函数声明,放哪儿?这问题看似简单,实则暗藏玄机,关系到编译器如何理解你的代码,进而影响程序的编译和运行。 很多新手容易掉进坑里,一脸懵逼地对着编译器报…

    2025年12月18日
    000
  • c语言函数返回值是什么

    C语言函数返回值是函数计算完成后返回给调用者的值,可以是多种数据类型,甚至不返回(void)。返回值不仅传递计算结果,还可以表示函数执行状态,选择合适的返回值类型能提高代码可读性和避免潜在问题。 C语言函数返回值?这问题问得妙啊!表面上看简单,其实里面门道可不少。简单来说,函数返回值就是函数计算完成…

    2025年12月18日
    000

发表回复

登录后才能评论
关注微信