《Keil C51单片机教程》 第2章:C51语言基础

2.1 C51的数据类型

基本数据类型
  • 整型
    • 定义:用于存储整数。在C51中,整型数据根据其占用内存空间的大小和是否有符号分为多种类型,常见的有 signed int(有符号整型)和 unsigned int(无符号整型)。
    • 存储和取值范围signed int 通常占用2个字节(16位),其取值范围是 -32768 到 32767 。这是因为最高位被用作符号位,0表示正数,1表示负数,采用补码形式表示负数。unsigned int 同样占用2个字节,但所有位都用于表示数值,所以取值范围是 0 到 65535 。例如:
signed int num1 = -10; 
unsigned int num2 = 50000; 
  • 字符型
    • 定义:用于存储单个字符,用 char 关键字表示。实际上,字符在计算机中是以对应的ASCII码值形式存储的,本质上是一个整数。
    • 存储和取值范围char 类型通常占用1个字节(8位)。分为 signed charunsigned charsigned char 的取值范围是 -128 到 127 ,unsigned char 的取值范围是 0 到 255 。例如:
char ch = 'A'; 
// 这里'A'的ASCII码值是65,实际存储的是65对应的二进制值
  • 浮点型
    • 定义:用于表示带有小数部分的实数。C51中常用的浮点型有 float(单精度浮点型)。
    • 存储和取值范围float 类型通常占用4个字节(32位),它可以表示大约7位有效数字,取值范围非常大。例如:
float f = 3.14159f; 
// 注意在常量后加f表示它是float类型
特殊数据类型(针对51单片机的存储类型)
  • 存储类型:C51针对51单片机的不同存储区域,定义了特殊的存储类型关键字。
    • data:表示数据存储在单片机内部的直接寻址RAM区,访问速度最快,通常用于频繁访问的变量。例如:
data char flag; 
- **bdata**:表示数据存储在单片机内部的可位寻址RAM区,允许按位操作变量。例如:
bdata int status; 
sbit bit_status = status^0; 
// 定义一个可位寻址的变量status,并定义一个位变量bit_status指向status的第0位
- **idata**:表示数据存储在单片机内部的间接寻址RAM区,访问速度比 `data` 稍慢,但比外部RAM快。例如:
idata int buffer[10]; 
- **pdata**:表示数据存储在单片机外部的页寻址RAM区,通过MOVX @Ri指令访问,适用于外部RAM容量较大且需要分页管理的情况。例如:
pdata char ext_data; 
- **xdata**:表示数据存储在单片机外部的扩展RAM区,访问速度相对较慢,但容量较大。例如:
xdata int large_array[100]; 
- **code**:表示数据存储在程序存储器(ROM)中,用于存放常量数据,如程序代码、常量数组等。例如:
code char welcome_msg[] = "Welcome!"; 

2.2 C51的运算符与表达式

算术运算符
  • 定义和用法:用于执行基本的数学运算,包括加(+)、减(-)、乘(*)、除(/)和取余(%)运算符。例如:
int a = 5, b = 3; 
int sum = a + b; 
int product = a * b; 
int quotient = a / b; 
int remainder = a % b; 
  • 注意事项:除法运算中,如果两个操作数都是整数,结果将是整数,小数部分会被截断。取余运算要求两个操作数都必须是整数。
关系运算符
  • 定义和用法:用于比较两个操作数的大小关系,返回结果为逻辑值(真或假)。常见的关系运算符有大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)和不等于(!=)。例如:
int a = 10, b = 20; 
bit result1 = a > b; 
bit result2 = a == b; 
  • 注意事项:在C语言中,逻辑值真用非零值表示,假用0表示。关系运算符的优先级低于算术运算符。
逻辑运算符
  • 定义和用法:用于对逻辑值进行操作,包括逻辑与(&&)、逻辑或(||)和逻辑非(!)。逻辑与运算符要求两个操作数都为真时结果才为真;逻辑或运算符只要有一个操作数为真结果就为真;逻辑非运算符将操作数的逻辑值取反。例如:
int a = 5, b = 10; 
bit result1 = (a > 0) && (b < 20); 
bit result2 = (a < 0) || (b > 0); 
bit result3 =!(a == b); 
  • 注意事项:逻辑运算符具有短路特性。例如在 a && b 中,如果 a 为假,就不会再计算 b;在 a || b 中,如果 a 为真,就不会再计算 b
位运算符
  • 定义和用法:用于对二进制位进行操作,包括按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)和右移(>>)。例如:
unsigned char a = 0x05; 
// 二进制为00000101
unsigned char b = 0x03; 
// 二进制为00000011
unsigned char result1 = a & b; 
// 按位与,结果为00000001
unsigned char result2 = a 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请向我看齐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值