不仅变量和常量不同,不同的数据类型之间也有差异。一些数据类型表示数字,一些数据类型表示字母(更普遍地说是字符)。C通过识别一些基本的数据类型来区分和使用这些不同的数据类型。如果数据是常量,编译器一般通过用户书写的形式来识别类型(如,42是整数,42.100是浮点数)。但是,对变量而言,要在声明时指定其类型。稍后会详细介绍如何声明变量。现在,我们先来了解一下 C语言的基本类型关键字。K&C给出了7个与类型相关的关键字。C90标准添加了2个关键字,C99标准又添加了3个关键字(见表3.1)。
![表3.1 C语言的数据类型关键字 表3.1 C语言的数据类型关键字](https://cdncos.worthstudy.cn/tbnote/2023/02/20230224212055123.png)
在C语言中,用int关键字来表示基本的整数类型。后3个关键字(long、short和unsigned)和C90新增的signed用于提供基本整数类型的变式,例如unsigned short int和long long int。char关键字用于指定字母和其他字符(如,#、$、%和*)。另外,char类型也可以表示较小的整数。float、double和long double表示带小数点的数。_Bool类型表示布尔值(true或false),_complex和_Imaginary分别表示复数和虚数。
通过这些关键字创建的类型,按计算机的储存方式可分为两大基本类型:整数类型和浮点数类型。
位、字节和字
位、字节和字是描述计算机数据单元或存储单元的术语。这里主要指存储单元。
最小的存储单元是位(bit),可以储存0或1(或者说,位用于设置“开”或“关”)。虽然1位储存的信息有限,但是计算机中位的数量十分庞大。位是计算机内存的基本构建块。
字节(byte)是常用的计算机存储单位。对于几乎所有的机器,1字节均为8位。这是字节的标准定义,至少在衡量存储单位时是这样(但是,C语言对此有不同的定义,请参阅本章3.4.3节)。既然1位可以表示0或1,那么8位字节就有256(2的8次方)种可能的0、1的组合。通过二进制编码(仅用0和1便可表示数字),便可表示0~255的整数或一组字符(第15章将详细讨论二进制编码,如果感兴趣可以现在浏览一下该章的内容)。
字(word)是设计计算机时给定的自然存储单位。对于8位的微型计算机(如,最初的苹果机),1个字长只有8位。从那以后,个人计算机字长增至16位、32位,直到目前的64位。计算机的字长越大,其数据转移越快,允许的内存访问也更多。
3.3.1 整数和浮点数
整数类型?浮点数类型?如果觉得这些术语非常陌生,别担心,下面先简述它们的含义。如果不熟悉位、字节和字的概念,请阅读上面方框中的内容。刚开始学习时,不必了解所有的细节,就像学习开车之前不必详细了解汽车内部引擎的原理一样。但是,了解一些计算机或汽车引擎内部的原理会对你有所帮助。
对我们而言,整数和浮点数的区别是它们的书写方式不同。对计算机而言,它们的区别是储存方式不同。下面详细介绍整数和浮点数。
3.3.2 整数
和数学的概念一样,在C语言中,整数是没有小数部分的数。例如,2、−23和2456都是整数。而3.14、0.22和2.000都不是整数。计算机以二进制数字储存整数,例如,整数7以二进制写是111。因此,要在8位字节中储存该数字,需要把前5位都设置成0,后3位设置成1(如图3.2所示)。
![图3.2 使用二进制编码储存整数7 图3.2 使用二进制编码储存整数7](https://cdncos.worthstudy.cn/tbnote/2023/02/20230224212737141.png)
3.3.3 浮点数
浮点数与数学中实数的概念差不多。2.75、3.16E7、7.00 和 2e-8都是浮点数。注意,在一个值后面加上一个小数点,该值就成为一个浮点值。所以,7是整数,7.00是浮点数。显然,书写浮点数有多种形式。稍后将详细介绍e记数法,这里先做简要介绍:3.16E7 表示3.16×107(3.16 乘以10 的7次方)。其中,107=10000000,7被称为10的指数。
这里关键要理解浮点数和整数的储存方案不同。计算机把浮点数分成小数部分和指数部分来表示,而且分开储存这两部分。因此,虽然7.00和7在数值上相同,但是它们的储存方式不同。在十进制下,可以把7.0写成0.7E1。这里,0.7是小数部分,1是指数部分。图3.3演示了一个储存浮点数的例子。当然,计算机在内部使用二进制和2的幂进行储存,而不是10的幂。第15章将详述相关内容。现在,我们着重讲解这两种类型的实际区别。
整数没有小数部分,浮点数有小数部分。
浮点数可以表示的范围比整数大。参见本章末的表3.3。
对于一些算术运算(如,两个很大的数相减),浮点数损失的精度更多。
![图3.3 以浮点格式(十进制)储存π的值 图3.3 以浮点格式(十进制)储存π的值](https://cdncos.worthstudy.cn/tbnote/2023/02/20230224213221108.png)
因为在任何区间内(如,1.0 到 2.0 之间)都存在无穷多个实数,所以计算机的浮点数不能表示区间内所有的值。浮点数通常只是实际值的近似值。例如,7.0可能被储存为浮点值6.99999。稍后会讨论更多精度方面的内容。
过去,浮点运算比整数运算慢。不过,现在许多CPU都包含浮点处理器,缩小了速度上的差距。
本人于2023年2月24日21:33:12学习完以上内容,特与此记录并分享。
其中可能遇到的疑问:
unsigned:unsigned-百科论坛-综合-同步笔记 (tbsat.cn)
暂无评论内容