单片机C51常用数据类型详解

C51数据类型

C语言的基本数据类型:char、int、short、long、float、double。

1、 Keil C51 编译器支持的数据类型。

   对于Keil C51编译器,short型与int型相同,double型与float型相同。

Keil C51支持的数据类型表

数据类型

长度

值域

unsigned char

单字节

0~255

signed char

单字节

-128~+127

unsigned int

双字节

0~65535

 signed int

双字节

-32768~+32767

unsigned long

4 字节

0~4294967295

signed long

4 字节

-2147483648~+2147483647

 float

4 字节

士1.175494E-38~±3.402823E+38

*

1~3 字节

对象的地址

bit

0或1

sfr

单字节

0~255

sfr16

双字节

0~65535

sbit

0或1

2 数据类型分析

2.1 char 字符类型

char 字符类型有 unsigned char和 signed char之分,默认值为 signed char,长度为1个字节,用以存放1个单字节数据。对于 signed char 型数据,其字节的最高位表示该数据的符号,“0”表示正数,“1”表示负数,数据格式为补码形式,所能表示的数值范围为 -128~+127;而unsigned char型数据是无符号字符型数据,所能表示的数值范围为0~255。

2.2  int整型

int 整型有 unsigned int 和 signed int之分,默认值为 signed int,长度为2个字节,用以存放双字节数据。signed int 是有符号整型数,unsignedint 是无符号整型数。

2.3 long 长整型

long 长整型有 unsigned long 和 signed long 之分,默认值为signed long,长度为4个字节。signed long 是有符号长整型数,unsigned long 是无符号长整型数。

2.4 float 浮点型

float 浮点型是符合 IEEE 754标准的单精度浮点型数据。float 浮点型数据占用4个字节(32 位二进制数),其存放格式见下表

float 浮点型数据存放格式

字节(偏移)地址

+3

+3

+1

+0

浮点数内容

SEEEEEEE

EMMMMMMM

MMMMMMMM

MMMMMMMM

S为符号位,存放在最高字节的最高位。“1”表示负,“0”表示正。E为阶码,占用8位二进制数,E值是以2为底的指数再加上偏移量127,这样处理的目的是避免出现负的阶码值,而指数是可正可负的。阶码E的正常取值范围是1~254,而实际指数的取值范围为-126~+127。M为尾数的小数部分,用23 位二进制数表示。尾数的整数部分永远为1,因此不予保存,但它是隐含存在的。小数点位于隐含的整数位“1”的后面,一个浮点数的数值表示是(-1)Sx2E-127x(1.M)。

2.5 指针型

指针型数据不同于以上4种基本数据类型,它本身是一个变量。但在这个变量中存放的不是普通的数据而是指向另一个数据的地址。指针变量也要占据一定的内存单元。在 Keil C51 中,指针变量的长度一般为 1~3 字节。指针变量也具有类型,其表示方法是在指针符号“*”的前面冠以数据类型符号,如“char*point”是一个字符型指针变量。指针变量的类型表示该指针所指向地址中数据的类型。

2.6 bit 位标量

bit位标量是 C51 编译器的一种扩充数据类型,利用它可以定义一个位标量。

2.7 sfr 定义特殊功能寄存器

sfr定义特殊功能寄存器是C51编译器的一种扩充数据类型,利用它可以访问8051单片机的所有内部的特殊功能寄存器。它占用一个内存单元,其取值范围是0~255

2.8  sfr16 定义 16 位特殊功能寄存器

sfr16定义16位特殊功能寄存器占用两个内存单元,其取值范围是0~65535

2.9 sbit 定义可寻址位

sbit 定义可寻址位也是C51 编译器的一种扩充数据类型,利用它可以访问 8051单片机内部 RAM 中的可寻址位和特殊功能寄存器的可寻址位。

3、变量的数据类型选择

变量的数据类型选择的基本原则如下。

(1)若能预算出变量的变化范围,则可根据变量长度来选择变量的类型,则尽量减少变量的长度。

(2)如果程序中不需使用负数,则选择无符号数类型的变量,

(3)如果程序中不需使用浮点数,则要避免使用浮点数变量。

4、数据类型之间的转换

在C语言程序的表达式或变量的赋值运算中,有时会出现运算对象的数据类型不一样的情况,C语言程序允许在标准数据类型之间隐式转换,隐式转换按以下优先级别(由低到高)自动进行:

bit→char →int→long →float→signed→unsigned

一般来说,如果有几个不同类型的数据同时运算,先将低级别类型的数据转换成高级别类型,再做运算处理,并且运算结果为高级别类型数据。

物联沃分享整理
物联沃-IOTWORD物联网 » 单片机C51常用数据类型详解

发表评论