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文章来源:https://www.toymoban.com/news/detail-472599.html
一般来说,如果有几个不同类型的数据同时运算,先将低级别类型的数据转换成高级别类型,再做运算处理,并且运算结果为高级别类型数据。文章来源地址https://www.toymoban.com/news/detail-472599.html
到了这里,关于单片机C51数据类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!