C语言为什么要定义short,int,long这么多整数类型?

Latsu


1.short,int,long不同的数据类型占用的内存空间不同,short为2字节,int为2或4字节,long为4或8字节。

2.不同的整型数据类型根据编程的现实使用环境,使用的变量取值范围不同,可以根据取值范围大小选择恰当的变量类型来节省内存空间的占用。

3.在硬件资源并不充裕的环境,如嵌入式应用的开发,合理分配变量类型,将会充分发挥硬件性能,降低产品成本。


计算理论


您好,作为C语言的过来人,很高兴能为您解惑释疑。对于C语言为什么要定义这么多的整数类型,我觉得是因为计算机的需要,因为不同的计算机的内存及表示范围需求不同,所以为了不浪费,不同的计算机机型就会使用不同的整数类型进行编程。


C语言的起源

跟人类的语言不同,计算机语言的发展史似乎没那么复杂,总的来说就是:机器语言 -> 汇编语言 -> 高级语言,而C语言便是一门面向过程的计算机高级语言,它创建于1972年,也是后来C++、JAVA等面向对象的计算机高级语言的前辈,它的创始人是Dennis MacAlistair Ritchie,非常牛逼的大师,纵使这么多年过去了,C语言仍旧是历久不衰,毕竟它可是最接近计算机的高级语言了,不可替代。


C语言的类型

C语言的数据类型众多,一般分为四大类:基本类型、指针类型、构造类型、空类型(void),而每个类又会分为不同的类型,具体如下图所示:


其中short、int、long 是C语言中常见的整数类型,int 称为整型,short 称为短整型,long 称为长整型。int 是基本的整数类型,short 和 long 是在 int 的基础上进行的扩展,short 可以节省内存,long 可以容纳更大的值。


  • 在现代操作系统中,int 一般占用 4 个字节(Byte)的内存,共计 32 位(Bit),如果不考虑正负数,当所有的位都为 1 时它的值最大,为 2^32-1 = 4,294,967,295 ≈ 43亿,这是一个很大的数,实际开发中很少用到,而诸如 1、90、1098 等较小的数使用频率反而较高,使用 4 个字节保存较小的整数绰绰有余,因此会空闲出两三个字节来,这些字节就白白浪费掉了,不能再被其他数据使用。


  • 现在随着个人电脑的内存越来越大,配置低的也有 2G,浪费一些内存不会带来明显的损失,所以我们一般也不会感觉到什么,但是在C语言被发明的早期,或者在单片机和嵌入式系统中,内存都是非常稀缺的资源,所有的程序都在尽力节省内存,所以为了让整数占用更少的内存就会用short类型的整数表示。



  • 反过来说,虽然int类型表示的43亿已经很大,但是要表示全球人口数量还是不够,必须要让整数占用更多的内存,才能表示更大的值,比如占用 6 个字节或者 8 个字节,所以为了让整数占用更多的内存来解决某些实际问题时,我们就可以用long类型的整数表示。


  • 类型表示范围图:


C语言实战

上面已经完全把short、int、long等各种整型的表示方法做了一下完整的介绍和说明,下面为了证实一下,特意写一个实例如下:

#include <stdio.h>
int main()
{
short a = 10;
int b = 100;
long c = 9437;
printf("a=%hd, b=%d, c=%ld\\n\

都市心声


针对这个问题,首先就得要从计算机存储数据开始说起吧!众所周知计算机中存储的最小单位为bit,存放的是二进制数也就是0和1。

每种数据类型的长度是不一样的,比如int,它就是占四个字节,而像double却占8个字节。

那么引入数据类型一方面是限制人的操作,不以规矩,不成方圆。另一方面就是更容易理解,降低出错率。


猿人生活


能表达整数的还不止这些,比如char,uchar,甚至bit类型都可以定义整数,区别是每个类型定义的整数范围不一样。这个跟处理器时代息息相关,本人上学那时接触的是16位系统,int类型长度不是目前的4字节,而是2字节。

过去内存硬件资源紧张,容不得半点浪费,因为稍不注意就不够用了。比如目前的单片机,虽然比十几年前有了极大改进,但和pc的相比那就是天差地别的了。

另外人们在做通信协议的时候,如果数据传输频率高,数据量大,就会考虑压缩协议字段,尽可能的用最少字节,甚至最少位来定义数据项(比如bit:3就是3位表达,其值范围是0~7)。

随着64位处理器的出现,那么long对应8字节整数也就好理解了,如果还有128位处理器,也会新增新的类型来与之对应。


码中寻乐


作为dos时代过来的人表示,以前int就表示16位,然后进入windows时代,计算机并未完全抛弃16位dos. 甚至图形界面还有一种色彩模式:16位深色彩。所以,16位数值还得继续提供。

再进入安卓和ios时代, 16位颜色模式还在支持,甚至有的软件还采用大量utf16编码。这些都告诉你,16数值类型还有太多实际的应用场景。更何况,还有一大堆开源代码以前写了大量的short.

而int代表的32位数据更不用说了。

我觉得只有long这个类型,历史遗留占更多成分。


三袋大菠萝


C语言是与硬件平台最近的语言,充分考虑了硬件特性。

优点是:利用硬件特性,C语言执行效率高。

缺点是:跨平台性不好,定义了数据类型,在个平台上可以运行,换个平台可能就有问题了。

辩证看问题,结合实际项目需求,我们选择利用它的优点。


china传统文化


int 简单一点说就是表示范围的大小,short < int < long,不过一般都习惯用int,

short的位置99可以用int代替,当然也可以用long代替,只不过int已经能满足一般使用,9位数。再大了就得用long行或者I64int了


沉默的风铃


简单来说,一句话就是,为了区分内存分配的大小并保持指针操作一致性和简单化,事实上c语言只要一种数据类型就是char就够了,其它任何类型都可以当作是它的别名用于区分长度,避免指针操作位移操作上的问题和难度


飞虎出征击长空


因为不同的变量有不同的size. 比如用于表示一个字母的个数,那么定义一个short类型的就可以了,节省空间。如果一个变量用于表示世界人口数,那么得定义一个long型的。


Nemo说电影


每个基本类型都有自己的作用,例如整形中int short long ,区别就是他们所占的内存大小以及可以存放的数据大小,shoot_125~+125,而int范围就比较大了有几万,其余就不说了

/<stdio.h>


分享到:


相關文章: