单片机C语言编程实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第2章 基本数据类型及运算

2.1 数据类型

数据是计算机处理的对象,也是计算机运行的最终目的,计算机要处理的一切内容最终都将以数据的形式出现。

由于不同的数据有不同的范围,如年纪在0~150岁,环境温度为-50.00~100.00℃,国家的国民生产总值以亿为单位。数据的范围越大,所需占用的存储字节越多,计算花费的时间也就越长,即使用的成本越大。为了在数据的范围和使用数据的成本之间取得平衡,就设立了各种数据类型。

C语言的数据类型有两种:“基本数据类型”和“扩展数据类型”。“扩展数据类型”由基本数据类型构成,包括数组、指针、枚举、结构体、共用体等,在掌握了“基本数据类型”后,再进行介绍。它们的关系如图2-1所示。

图2-1 C语言数据类型

基本数据类型见表2-1,在选择数据类型时,一定要了解其数值范围,如果范围不够,就会产生数据溢出,导致计算错误。整型数据可精确保存数据,但范围较小,实型数据范围很宽,保存数据时可能存在微小误差。

表2-1 基本数据类型

注:方括号内的说明符可忽略,实型数据常称为浮点数。

MCS51系列单片机都是8位CPU,用8位数据类型进行运算如char和unsigned char比用int或long类型更有效,要尽可能使用最小的数据类型。例如:两个char类型数据的乘法用指令MUL AB直接完成,而int或long类型变量,相同的运算要求调用编译器库函数,需花费更多时间。

MCS51系列单片机不明确支持带符号数运算,对带符号的数据进行计算需花费很多时间。如有可能,尽量用unsigned类型,最好不使用实型数据,可以减少代码,加快速度。

带符号整型是指存储一个整数的存储单元中的最高二进位是符号位,其他二进位都用做存放数据。无符号整型是指存储一个整数的存储单元中的全部二进位都用做存放数据本身,而不存储符号位。

用16个二进位表示一个带符号的整数,它的数值范围是-32768~32767;表示一个无符号整数的数值范围是0~65535。若用32 个二进位表示一个整数,带符号和不带符号整数的数值范围分别是-2147483648~2147483647和0~4294967295。

通常定义变量的数据类型时都是使用标准的关键字,有时为了方便,可以使用关键字typedef定义自己的数据类型,方便程序的移植和简化较长的数据类型定义。

例如:

      typedef int integer;           //指定integer代表int
      typedef float real;            //指定real代表float

经过上述定义后,以下两行等价。

      ①int a,b;                    float j,k;
      ②integer a,b;                real j,k;

typedef不能直接用来定义变量,它只是对已有的数据类型作一个名字上的置换,方便使用,并不是产生一个新的数据类型。