首页 > 其他分享 >C51基础知识

C51基础知识

时间:2025-01-15 19:31:27浏览次数:3  
标签:ch C51 int 数据类型 基础知识 char 单片机

1.什么是C51?

计算机平台——C语言

单片机平台——C51

计算机平台的CPU主频,内存和硬盘相较于单片机平台都是巨大的量级,另一方面,计算机平台的有不同的操作系统,如Windows,Linux,macOS等,单片机一般是没有操作系统的,(也会有一些简单的操作系统如:RTOS,但与计算机平台的系统相比,还是较为简单的)代码直接运行在芯片上,我们常称为裸机开发,计算机平台的开发叫做基于系统的开发。另外,编写代码时,需要基于单片机硬件的不同进行编写,而在计算机平台的开发则很少考虑这些问题。

2.C51数据类型

若选用不恰当的数据类型,可能导致程序无法正常运行。

(1)整型

不同类型占用字节数
WindowsC51
short2Byte2Byte
int

4Byte

2Byte
long

4Byte

4Byte
long long8Byte无定义

由表可知,最常用的整型变量为int和long

同时整型又分为有符号和无符号数据类型

有符号int,为15位数据位和一位符号位。无符号int,16位都是数据位,没有符号位

数据类型范围
signed int2Byet-32768~32767
unsigned int0~65535
signed long4Byet-2147483648~2147483647
unsigned long0~429496295

(2)浮点型

不同数据类型占用字节数
WindowsC51
float4Byte4Byte
double8Byte4Byte

可以看出,对于C51而言,这两个数据类型占用字节数相同,因此可以一般均采用float类型。

对于浮点型数据,一般不太关注数据范围,因为是非常大的。

(3)字符型 

char类型占用字节数
WindowsC51
char1Byte1Byte

 应当说明的是,char ch ='a';和char ch=97;表达的含义相同,因此在实际的单片机开发过程中,char类型也是可以作为整型的一部分。

signed char1Byte-128~127
unsigned char0~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

相关文章