C51的数据类型

  • 格式:pdf
  • 大小:131.19 KB
  • 文档页数:3

C51的数据类型

C51的数据类型

数据的格式通常称为数据类型。标准的C语⾔的数据类型可分为基本数据类型和组合数据类型,组合数据类型由基本数据类型

构造⽽成。标准的C语⾔的基本数据类型有字符型char、短整型short、整型int、长整型long、浮点型float、和双精度型double。组合数据类型有数组类型、结构体类型、共同体类型和枚举类型,另外还有指针类型和空类型。C51的居类型也分为

基本数据类型和组合数据类型,情况与标准C中的数据类型基本相同,但其中char型与short型相同,float型与double型相同。

另外,C51中还有专门针对于MCS-51单⽚机的特殊功能寄存器型和位类型。具体情况如下:

1、字符型char

有signed char和unsigned char之分,默认为signed char。它们的长度均为⼀个字节,⽤于存放⼀个单字节的数据。对于signed char,它⽤于定义带符号字节数据,其字节的最⾼位为符号位,“0”表⽰正数,“1”表⽰负数,补码表⽰,所能表⽰的数

值范围是-128~+127;对于unsigned char,评测⽤于定义⽆符号字节数据或字符,可以存放⼀个字节的⽆符号数,其所表⽰

的数值范围为0~255。Unsigned char可以⽤来存放⽆符号数,也可以存放西⽂字符,⼀个西⽂字符占⼀个字节,在计算机内

部⽤ASCII码存放。

2、int整型

有signed int和unsigned int之分,默认为signed int。它们的长度均为两个字节,⽤于存放⼀个双字节数据。对于signed int,

它⽤⼀存放两字节带符号数,补码表⽰,所能表⽰的数值范围为-32768~+32767。对于unsigned int,它⽤于存放两字节⽆符

号数,数的范围为0~65535。

3、long长整型

有signed long和unsigned long之分,默认为signed long。它们的长度均为四个字节,⽤于存放⼀个四字节数据。对于signedlong,它⽤于存放四字节带符号数,补码表⽰,所能表⽰的数值范围为-48~+47。对于unsigned long,它⽤于存放四字节⽆符

号数,所能表⽰的数值范围为0~95。

4、float浮点型

float型数据的长度为四个字节,格式符合IEEE-754标准的单精度浮点型数据,包含指数和尾数两部分,最⾼位为符号

位,“1”表⽰负数,“0”表⽰正数,其次的8位为阶码,最后的23位为尾数的有效位,由于尾数的整数部分隐含为“1”,所以尾数

的精度为24位。在内存中的格式如下图所⽰。

其中,S为符号位;E为阶码位,共8位,⽤移码表⽰。阶码E的正以值范围为1~254,⽽对应的指数实际取值范围为-126~+127;M为尾数的⼩数部分,共23位,尾数的整数部分始终为“1”。故⼀个浮点数的取值范围为(-1)S×2E-127×。

例如浮点数+=+1111,=+ 0111×2+110,符号位为“0”,8位阶码E为+110+1111 111=1000 0101B,23位数值位为111 1001 10000000 0000 0000B,32位浮点数表⽰形式为0100 0010 1111 1001 1000 0000 0000 0000B=42F98000H,在内存中的表式形式如下图所⽰。

需要指出的是,对于浮点型数据除了正常数值之外,还可能出现⾮正常数值。根据IEEE 标准,当浮点数据取以下数值(16进

制数)时即为⾮正常值:

FFFF FFFFH(⾮数NaN)

7F80 0000H(正溢出+1NF)

FF80 0000H(负溢出-1NF)

另外,由MCS-51单⽚机不包括捕获浮点运算错误的中断向量,因此必须由⽤户⾃⼰根据可能出现的错误条件⽤软件来进⾏适

当的处理。5、*指针型

指针型本⾝就是⼀个变量,在这个变量中存放着指向另⼀个数据的地址。这个指针变量要占⽤⼀定的内存单元。对不同的处理

器其长度不⼀样,在C51中它的长度⼀般为1~3个字

节。

6、特殊功能寄存器

这是C51扩充的数据类型,⽤于访问MCS-51单⽚机中的特殊功能寄存器数据。它分为sfr和sfr16两种类型,其中sfr为字节型特

殊功能寄存器类型,占⼀个内存单元,利⽤它可以访问MCS-51内部的所有特殊功能寄存器;sfr16为双字节型特殊功能寄存器

类型,占⽤两个字节单元,利⽤它可以访问MCS-51内部的所有两个字节的特殊功能寄存器。在C51中对特殊功能寄存器的访

问必须先⽤sfr或sfr16进⾏声明。

7、位类型

这也是C51中扩充的数据类型,⽤于访问MCS-51单⽚机中可寻址的位单元。在C51中,⽀持两种位类型:bit型和sbit型。它

们在内存中都只占⼀个⼆进制位,其值可以是“1”或“0”。其中⽤bit定义的位变量在C51编译器编译时,在不同的时候位地址是

可以变化的。⽽⽤sbit定义的位变量必须与MCS-51单⽚机的⼀个可以寻址位单元或可位寻址的字节单元中的某⼀位联系在⼀

起,在C51编译器编译时,其对应的位地址是不可变化的。

下表为KEIL C51编译器能够识别的基本数据类型基本数据类型长度取值范围

Signed char1字节-128~+127

Unsigned int2字节0~65535

Signed int2字节-32768~+32767

Unsigned long4字节0~95

Signed long4字节-48~+37

float4字节±~±+38

bit1位0或1

sbit1位0或1

sfr1字节0~255

在C51语⾔程序中,有可能会出现在运算中数据类型不⼀致的情况。C51允许任何标准数据类型的隐式转换,隐式转换的优先

顺级顺序如下:

Bit->char->int->long->float

signed->unsigned

也就是说,当char型与int弄进⾏运算时,选⾃动对char型扩展为int型,然后与int型进⾏运算,运算结果为int型。C51除了⽀持

隐式类型转换外,还可以通过强制类型转换符“()”对数据类型进⾏⼈为的强制转换。

C51编译器除了能⽀持以上这些基本数据类型之外,还能⽀持⼀下结复杂的组合型数据类型,如数组类型、指针类型、结构类

型和联合类型等复杂的数据类型。在本书的后⾯将相继介绍它们。

8、枚举

在C51语⾔中,⽤作标志的变量通常只能被赋予如下两个值中的⼀个:True(1)或False(0)。但是在编程中,常常会将作为标志

使⽤的变量赋予除了True(1)或False(0)以外的值。另外,标志变量通常被定义为int数据类型,在程序使⽤中作⽤往往会模糊不

清。为避免这种情况,在C51语⾔中提供枚举类型处理这种情况。枚举数据类型是⼀个有名字的某些整型常量的集合。这些整型常量是该类型变量可取的所有合法值。枚举定义时应当列出该类

型变量的所有可取值。

枚举定义的格式与结构和联合基本相同,也有两种⽅法。

先定义枚举类型,再定义枚举变量,格式如下:

enum 枚举名 {枚举值列表};

enum 枚举名枚举变量列表;

或在定义枚举类型的同时定义枚举变量,格式如下:

enum 枚举名 {枚举值列表} 枚举变量列表;

例如:定义⼀个取值为星期⼏的枚举变量dl。

enum week {Sun,Mon,Tue,Wed,Thu,Fri,Sat};

enum week dl;

enum week {Sun,Mon,Tue,Wed,Thu,Fri,Sat} dl;

以后就可以把枚举值列表中各个值赋给枚举变量dl进⾏使⽤了。