目录
一、关键字部分
static
仅将变量初始化一次,第二次调用时不进行初始化
code
将数据存储在ROM中(写入后不能再更改)
const
将数据存储在RAM中(写入后不能再更改)
extern
extern关键字可以使变量或者函数跨文件被访问
用法:
int a=5; //第一个文件
extern int a; //需要用到外部变量的文件
bit
bit是C51编译器的一种扩充数据类型,利用它可定义一个位标量,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,不是0就是1
用法:
bit mode=0;
bit=!mode; //或bit=~mode
sbit
sbit是C51编译器的一种扩充数据类型,用于将特殊功能寄存器中的某一位赋值给一个变量
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sft
sfr是C51编译器的一种扩充数据类型,用于将一整个特殊功能寄存器赋值给一个变量
sfr P0 = 0x80;
sfr P1 = 0x90;
struct(结构体)
struct关键词表示接下来是一个结构体
结构体本质上是一种数据类型,但它可以包括若干个“成员”,每个成员的类型可以相同也可以不同
1、结构体的初始化
struct fruit{ //fruit是结构体名
char type[20];
int num;
}F1; //F1是结构体变量名(的前缀)
2、结构体的赋值
struct fruit F1={"apple",1024};
//或:
//struct fruit{
// char type[20];
// int num;
//}F1={"apple",1024};
3、应用
data idata pdata xdata 与 code
data 可将变量放入内部RAM的低八位
idata 可将变量放入内部RAM的高八位
pdata 可将变量放入外部RAM的低256个字节
xdata 可将变量放入外部RAM的所有字节
code 可将变量放入ROM中(写入后不能更改)
二、运算符部分
逗号运算符[ , ]
逗号表达式中用逗号分开的表达式分别求值,以最后一个表达式的值作为整个表达式的值。
运算符[ -> ]
若有一个结构体person,结构体中有一个变量age,
则 i = person->age的意思是提取结构体成员变量age的值,并赋值给变量i
位运算符-按位异或[ ^ ] 按位或[ | ]
[ ^ ] 按照每一位(bit),相同为0,相反为1
[ | ] 两个二进制对应的位只要有一个为1,新的二进制相对的位就为1
x=0001 0010
y=0100 1111
x^y=0101 1101 (x|y=0101 1111)
a=0101 1100
a^0xff; //a=1010 0010 a^0xff,相当于a=~a
左移运算符[<<]
最低位到前一位后,最低位补0;
a = 1001 1101
b = a<<1 //b=0011 1010
notes:与循环移位函数(_cror_ _crol_)区别: 最高最低位不进行补位,而是进行循环
a = 1234 5678
b = _crol_(a,1) //b=2345 6781
三、其他
i++和++i的区别
i++后自增,先赋值,
++i先自增,后赋值;
if(i++){//}; //i现在if中进行判断,再自增
u16和u32
#define u8 unsigned char
#define u32 unsigned int
字符串与字符数组
区别:字符串使用 " " 一次性赋值,末尾自动添0; 字符数组就是将字符型变量一个个地赋值给数组
char A[]="ABCD"; //长度为6
char B[]={'A','B','C','D'}; //长度为5
去余的几个特殊数值
0%2=0
1%2=1
2%2=0
3%2=1
常用格式化说明符
%d | 读入十进制整数 |
%u | 读入一个无符号十进制整数 |
%x | 读入十六进制整数 |
%o | 读入八进制整数 |
%i | 读入十进制,八进制,十六进制整数 |
%c | 读入一个字符 |
%s | 读入一个字符串(其要求的参数是指针) |
%f | 读入一个浮点数 |
%p | 读入一个指针 |
%% | 读%符号 |
NOTES:
1、格式化说明符可大写也可小写
2、&中的&是地址运算符,分别获得这三个变量的内存地址
3、printf只需要获得参数数值,scanf需要修改变量的能力。故scanf需要取址符&
4、小数记得使用“%f”配合“float定义”来发送
5、%f 默认保留六位小数,不足六位以 0 补齐,超过六位按四舍五入
6、51单片机与标准C有区别:
%d | Int |
%bd | char |
%u | unsigned int |
float与double
float类型,单精度浮点数,可以存放8个字节
double类型,双精度,可以存放16个字节
区别:
double精度高,精度16位(保留15位小数),float精度7位(保留6位小数)
小数默认是double类型,用float时需要进行强转,或者在小数后加上f。