C语言常用的知识没多少之C语言的数据类型及变量与常量

C语言中有数值和数制之分,在这里就从数值和数制开始讲起。其实数值和数制这四个字就已经包含了本文的标题C语言的数据类型及变量与常量。

为了方便理解数值和数制,先联系一下现实生活中的数。现实中的数学在数方面分为实数和虚数,而实数又分为整数、小数、分数、正数、负数、自然数等。这些把数根据某些标准分成几类称为数制。而我们常说的数,比如1、2、3......的具体数,不管是什么数都称为数值。

C语言处理的都是一些数,这个以后会体现到的,在这里先提一下。C语言为了跟实际结合紧密,所以也有上述类似的情况。把数按照跟机器紧密结合的标准制成C语言的“数制”——数据类型。C语言的数据类型如下所示:

1、整型

2、实型

3、字符型

4、枚举型

整型

整型也就指生活当中所说的整数,包括负整数、0和正整数。但也根据数值的大小分成如下类型

短整型(short) 2字节 -32768~32767

带符号短整型(signed short [int]) 2字节 -32768~32767

无符号短整型(unsigned short [int]) 2字节 0~65536

整型(int) 4字节 -2147483648~2147483647

带符号整型(signed int) 4字节 -2147483648~2147483647

无符号整型(unsigned int) 4字节 0~4294967295

长整型(long [int]) 4字节 -2147483648~2147483647

带符号长整型(signed long[int])4字节 -2147483648~2147483647

无符号长整型(unsigned long [int]) 4字节 0~4294967295

其中括号里的英文是这些数据类型的关键字,关键字之后在讲。方括号里的英文为可以省略的。字节在表示该数据类型在计算机占的空间,与我们常说的兆(MB)、吉(G)等一样,只是是最基础的单位。这里写的字节是根据vc++6.0软件的标准列出的。字节的大小会根据系统的位数以及所使用的软件不同而不同,不过这个可以很快查询,查询方法以后会讲,现在用不到。需要注意的是字节数的不同也会影响数据类型的范围。

在计算机和网络流量计算中一个0或1成为位或bite,8位或8bite成为一字节或1byte,1024字节或1024byte为1千字节或1KB......其他的都是按1024为单位进行换算,1024是2的10次方。这也能推出为什么买的手机或电脑的各个存储空间比实际少的原因了,原因是厂家是按1000为换算单位,而电脑或手机显示的空间是按1024进行换算的,比1000要少。

无符号与有符号的区别虽然只是相差能不能表示负数的区别,但范围相差很大的原因是,计算机中的最高位用来表示该数是否为正数。0表示该数为正数;1表示该数为负数,并且以补码的形式存储。在相同的字节中,最高位腾出来要区别正负,所以两者的范围相差很大。至于什么是补码?在这里不在讲了,有兴趣的可以查下资料。其中的原因也决定着为何这些类型的范围有奇数,而偶数个二进制的组合一般为偶数。

看到这些这么多的数据类型和取值范围难免会头晕,但是常用的没几个,以上最常用的就只有整型(int),其他的会在特殊情况下使用到,到时查一下资料就行了。

实型

实型与我们生活中的有所不同了。在计算机中,实型是指小数(包括分数)。实型的数据类型如下:

单精度实型(float) 4字节 约-3.14×10-38~3.14×1038

双精度实型(double) 8字节 约-1.7×10-308~1.7×10308

长双精度实型(long double)16字节 约-1.2×10-4932~1.2×104932

没有严格要求的情况下,实型也包含整型,就像生活中的1与1.0区别不是太大。其中常用的有双精度实型(double),单精度实型(float)不是太常用。但是之前所说的整型(int)不能被双精度实型(double)和单精度实型(float)代替掉。因为float在运算过程中与实际运算中的小数点之后的数相差很大。

在高中学过十进制转换成二进制的转换方法。整数部分是除2取余,直到余数为0或1,顺序倒着数,高位是最后得到的余数;小数点后的部分是乘2取整,即小数点后面的数乘以2,取整数的0或1,直到取够位数或小数点后面为0。在计算机中经常会采取前面的方法及取相应的位数,这样导致与实际小数的误差很大。在使用中因为会将整数和小数搞混,整数虽然不会出现误差,但小数误差比较大。所以不能用单精度实型(float)代替整型(int)。

为了减小误差,所以就有取整位数更多的双精度实型(double),但是带来的后果是所占的存储空间是原来的2倍。所以也不能用双精度实型(double)代替整型(int)。

字符型

字符型的类型如下

字符型(char) 1字节 -128~127

带符号字符型(signed char) 1字节 -128~127

无符号字符型(unsigned char) 1字节 0~255

字符型是可以表示字母和特殊符号等,如a、A、!、#等。因为这些符号或字母等比较多,所以对他们进行了统一的排号。它们的排号决定着它们在计算机存储时的数值大小。它们的排号也构成了一个表——ASCII表。该表如下:

其中的十进制和二进制都表示一个数。其中有些特殊字符是无法显示的,如空格和换行等,但它们也有存在意义。表中内容虽然很多但是常用的没几个,而且用时可以查,常用的也都有规律。常用的有字母a~z,包括大小写。

其中没有汉字的原因是,该表的存储是用1个字节的,最多能存储255个。而汉字有上万个,1个字节肯定不能完全表示出来。仔细观察的话会发现只有128个字符(包括字母),而无符号字符可以有256个不同的范围,所以汉字及其他国家的字都是用至少2个字节表示(可以用字母完全表示的国家除外)。

布尔型

布尔型的数据成为布尔数,其只有0和1的取值,在计算机中占有1个位。0表示为假;1表示为真。使用时需要包含stdbool.h文件。文件的知识以后会讲解。

其它数据类型

其实还有其它的数据类型,但是并不常用,所以在这里不再例举了。有兴趣的可以查阅相应的资料。

变量与常量

变量犹如x,一个未知的数值,可以为0,也可以为1等任何数。常量就是这些变量的数值,如1就是1,不能说它是0等任何数,汉字中的大写或繁体一除外,0也是这样。其中因为字符在ASCII表中有确定的数值,所以也称字符为常量。C语言中会不停的使用常量与变量,初学者很容易搞混,最好多查阅和多度一些相关的资料。这样就能够分清什么是常量,什么是变量。

如果有问题的可以在公众号回复栏中写出问题描述发给我,我看到的话会进行相应的回复。如果发现文章有问题,也欢迎在公众号回复栏中提问,我会查阅资料进行确认并做出修改和回复。

既然阅读了本篇文章,顺便点一下右下边的在看按钮。

原文发布于微信公众号 - IT界的小白帽(l1084504793)

原文发表时间:2019-06-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券