1.什么是C51?
计算机平台——C语言
单片机平台——C51
计算机平台的CPU主频,内存和硬盘相较于单片机平台都是巨大的量级,另一方面,计算机平台的有不同的操作系统,如Windows,Linux,macOS等,单片机一般是没有操作系统的,(也会有一些简单的操作系统如:RTOS,但与计算机平台的系统相比,还是较为简单的)代码直接运行在芯片上,我们常称为裸机开发,计算机平台的开发叫做基于系统的开发。另外,编写代码时,需要基于单片机硬件的不同进行编写,而在计算机平台的开发则很少考虑这些问题。
2.C51数据类型
若选用不恰当的数据类型,可能导致程序无法正常运行。
(1)整型
Windows | C51 | |
short | 2Byte | 2Byte |
int | 4Byte | 2Byte |
long | 4Byte | 4Byte |
long long | 8Byte | 无定义 |
由表可知,最常用的整型变量为int和long
同时整型又分为有符号和无符号数据类型
有符号int,为15位数据位和一位符号位。无符号int,16位都是数据位,没有符号位
signed int | 2Byet | -32768~32767 |
unsigned int | 0~65535 | |
signed long | 4Byet | -2147483648~2147483647 |
unsigned long | 0~429496295 |
(2)浮点型
Windows | C51 | |
float | 4Byte | 4Byte |
double | 8Byte | 4Byte |
可以看出,对于C51而言,这两个数据类型占用字节数相同,因此可以一般均采用float类型。
对于浮点型数据,一般不太关注数据范围,因为是非常大的。
(3)字符型
Windows | C51 | |
char | 1Byte | 1Byte |
应当说明的是,char ch ='a';和char ch=97;表达的含义相同,因此在实际的单片机开发过程中,char类型也是可以作为整型的一部分。
signed char | 1Byte | -128~127 |
unsigned char | 0~255 |
3.常用运算符号
(1)算术运算符
- +
- -
- *
- /
- %
- ++
- --
特别注意的是,取模运算只能用于整数,不能用于浮点数
(2)关系运算符
- >
- <
- ==
- >=
- <=
- !=
(3) 位操作运算符
- & 与
- | 或
- ~非
- ^ 异或
- << 左移
- >>右移
实质上是对二进制的操作
左移:向高位移,在低位补0,高位溢出的删掉
右移:向低位移,在高位补0,低位溢出的删掉
^异或运算,在单片机中最常用的,是对某一位进行反转
异或运算
5 0101
^ 0011 =3
6 0110
(4)逻辑运算符
- &&
- ||
- !
(5)&和&&的区别是什么?
逻辑运算是将式子作为整体进行运算的
举例来说明,
10&&7=1 非零和非零结果为1 一般会用两个式子进行逻辑运算如5>3&&3*2<5=0
10&7=2
10 1010
& 0010 =2 //该行为&运算之后的结果
7 0111
类似的,|和||之间的区别同理。
(6)~和!之间的区别是什么?
逻辑运算
!5>3=0
!2*3=5 =1
~7
0000 0111
1111 1000=248
unsigned char
~7
0000 0000 0000 0111
1111 1111 1111 1000=65528
unsigned int
上面的例子可以看出,在不同的数据类型里,对7取反的值是不同的
(7)优先级说明
在进行运算时,如果不确定优先级的高低,可以用括号。
4.常用头文件
C语言中常用的头文件
标准输入输出 标准库 数学库 字符串库
stdio.h stdlib.h math.h string.h
sprintf(); malloc(); sin(); strlen();
scanf(); free(); cos(); strcpy();
fgets(); rand(); atan(); strcat();
fputs(); atoi(); sqrt(); strcmp();
printf();
C51的开发中常用的库有stdio.h和math.h,其中sprintf();是标准输入输出库中较为常用的,
char str[32];
int a=10 b=5;
sprintf(str,"hello,world");
sprintf(str,"%d+%d=%d",a,b,a+b);
将字符串保存至数组
另外,intrins.h也会用到,包含的_nop_();这条语句作用是使单片机运行停止一个周期
5.不同数据类型使用的不同的格式化字符串符号
整型 | |
signed int | %d |
unsigned int | %u |
signed long | %ld |
unsigned long | %lu |
浮点型 | |
float | %f |
字符型 | |
char | %c |
特别注意的是,
char ch ='a'
printf("%c",ch);//输出a
char ch =50
printf("%c",ch);//输出2
char ch =50
printf("%d",(int)ch);//输出50
类似的
unsigned char ch=50;
printf("%u",(unsigned int)ch);//输出50
当做整数输出时,需要进行强制类型转换
6.进制关系梳理
不同进制可以进行加减运算
十进制 15 26 41
二进制 0b0000 1111 0b0001 1010 0b0010 1001
十六进制 0x0f 0x1A 0x29
值得注意的是,变量保存的是数值,而非进制。
标签:ch,C51,int,数据类型,基础知识,char,单片机 From: https://blog.csdn.net/2301_79608998/article/details/145138496