单片机C语言运算符全解析:掌握运算和赋值的艺术
发布时间: 2024-07-08 18:06:24 阅读量: 64 订阅数: 23
![零基础学单片机c语言程序设计](https://img-blog.csdnimg.cn/d9eafc749401429a9569776e0dbc9e38.png)
# 1. C语言运算符简介**
运算符是C语言中用于执行操作和修改数据的符号或关键字。它们是C语言语法的重要组成部分,用于执行算术、逻辑、赋值和关系操作。运算符可以应用于变量、常量和表达式,并产生一个结果。
C语言中有多种类型的运算符,包括算术运算符、赋值运算符、逻辑运算符和关系运算符。这些运算符具有不同的优先级和结合性,影响运算的执行顺序。理解运算符的优先级和结合性对于编写正确的C语言代码至关重要。
# 2. 算术运算符
算术运算符用于执行算术运算,包括加法、减法、乘法、除法和取模。它们可以应用于整数、浮点数和字符类型的数据。
### 2.1 基本算术运算符
| 运算符 | 描述 |
|---|---|
| + | 加法 |
| - | 减法 |
| * | 乘法 |
| / | 除法 |
| % | 取模 |
**示例:**
```c
int a = 10;
int b = 5;
printf("a + b = %d\n", a + b); // 输出:15
printf("a - b = %d\n", a - b); // 输出:5
printf("a * b = %d\n", a * b); // 输出:50
printf("a / b = %d\n", a / b); // 输出:2
printf("a %% b = %d\n", a % b); // 输出:0
```
### 2.2 自增自减运算符
自增(++)和自减(--)运算符用于递增或递减变量的值。它们可以作为前缀或后缀运算符使用。
**前缀运算符:**
```c
int a = 10;
// 将 a 递增 1
++a;
// a 现在为 11
```
**后缀运算符:**
```c
int a = 10;
// 将 a 递减 1
a--;
// a 现在为 9
```
**注意:**前缀运算符在计算表达式之前修改变量,而后缀运算符在计算表达式之后修改变量。
### 2.3 位运算符
位运算符用于执行按位操作,包括按位与(&)、按位或(|)、按位异或(^)和按位取反(~)。它们可以应用于整数类型的数据。
| 运算符 | 描述 |
|---|---|
| & | 按位与 |
| | | 按位或 |
| ^ | 按位异或 |
| ~ | 按位取反 |
**示例:**
```c
int a = 10; // 二进制:1010
int b = 5; // 二进制:0101
printf("a & b = %d\n", a & b); // 输出:0000(二进制:0)
printf("a | b = %d\n", a | b); // 输出:1111(二进制:15)
printf("a ^ b = %d\n", a ^ b); // 输出:1111(二进制:15)
printf("~a = %d\n", ~a); // 输出:-11(二进制:111111111111111111111110)
```
# 3. 赋值运算符**
### 3.1 简单赋值运算符
简单赋值运算符用于将一个值赋给一个变量。其语法为:
```c
变量名 = 表达式;
```
例如:
```c
int a = 10;
```
此代码将值 10 赋给变量 a。
### 3.2 复合赋值运算符
复合赋值运算符将一个表达式应用于变量的当前值,然后将结果赋给该变量。其语法为:
```c
变量名 运算符= 表达式;
```
其中,运算符可以是:
* `+=`:加法赋值
* `-=`:减法赋值
* `*=`:乘法赋值
* `/=`:除法赋值
* `%=`:取模赋值
* `<<=`:左移赋值
* `>>=`:右移赋值
* `&=`:按位与赋值
* `|=`:按位或赋值
* `^=`:按位异或赋值
例如:
```c
int a = 10;
a += 5; // a 的值变为 15
```
### 3.3 位段赋值运算符
位段赋值运算符用于将一个位段的值赋给一个变量。其语法为:
```c
变量名.位段名 = 表达式;
```
例如:
```c
struct {
unsigned int a : 4;
unsigned int b : 4;
} bits;
bits.a = 0b1010; // 将位段 a 设置为 1010
```
**代码逻辑逐行解读:**
1. 定义一个结构体 `bits`,其中包含两个 4 位的位段 `a` 和 `b`。
2. 将位段 `a` 设置为二进制值 1010,即十进制值 10。
# 4. 逻辑运算符
逻辑运算符用于对布尔表达式进行操作,布尔表达式返回真或假。逻辑运算符可以将多个布尔表达式组合成一个更复杂的布尔表达式。
### 4.1 基本逻辑运算符
基本逻辑运算符有三个:
- **与运算符 (&):**如果两个操作数都为真,则返回真;否则,返回假。
- **或运算符 (|):**如果两个操作数中有一个为真,则返回真;否则,返回假。
- **非运算符 (!):**对一个操作数进行取反操作,如果操作数为真,则返回假;如果操作数为假,则返回真。
**代码块:**
```c
int a = 1, b = 0;
printf("a & b = %d\n", a & b); // 输出 0
printf("a | b = %d\n", a | b); // 输出 1
printf("!a = %d\n", !a); // 输出 0
```
**逻辑分析:**
- `a & b`:`a` 为真,`b` 为假,所以结果为假。
- `a | b`:`a` 为真,`b` 为假,所以结果为真。
- `!a`:`a` 为真,所以结果为假。
### 4.2 按位逻辑运算符
按位逻辑运算符是对两个操作数的二进制位进行逐位操作:
- **按位与运算符 (&):**如果两个操作数的对应位都为 1,则结果位为 1;否则,结果位为 0。
- **按位或运算符 (|):**如果两个操作数的对应位有一个为 1,则结果位为 1;否则,结果位为 0。
- **按位异或运算符 (^):**如果两个操作数的对应位不同,则结果位为 1;否则,结果位为 0。
- **按位取反运算符 (~):**对一个操作数的二进制位取反,0 变为 1,1 变为 0。
**代码块:**
```c
int a = 5, b = 3;
printf("a & b = %d\n", a & b); // 输出 1
printf("a | b = %d\n", a | b); // 输出 7
printf("a ^ b = %d\n", a ^ b); // 输出 6
printf("~a = %d\n", ~a); // 输出 -6
```
**逻辑分析:**
- `a & b`:`a` 的二进制表示为 101,`b` 的二进制表示为 011,对应位相与得到 001,转换为十进制为 1。
- `a | b`:对应位相或得到 111,转换为十进制为 7。
- `a ^ b`:对应位异或得到 110,转换为十进制为 6。
- `~a`:对 `a` 的二进制位取反得到 010,转换为十进制为 -6。
### 4.3 三元条件运算符
三元条件运算符是一种缩写的 if-else 语句,语法为:
```
(条件表达式) ? 真值 : 假值
```
如果条件表达式为真,则返回真值;否则,返回假值。
**代码块:**
```c
int a = 10, b = 5;
int max = (a > b) ? a : b;
printf("max = %d\n", max); // 输出 10
```
**逻辑分析:**
- 条件表达式 `(a > b)` 为真,所以返回真值 `a`,即 10。
# 5. 关系运算符**
**5.1 比较运算符**
比较运算符用于比较两个表达式的值,并返回一个布尔值(true 或 false)。C 语言中常用的比较运算符有:
| 运算符 | 含义 |
|---|---|
| `<` | 小于 |
| `>` | 大于 |
| `<=` | 小于等于 |
| `>=` | 大于等于 |
| `==` | 等于 |
| `!=` | 不等于 |
**5.2 相等运算符**
相等运算符 `==` 和 `!=` 用于比较两个表达式的值是否相等。它们返回一个布尔值,表示两个表达式是否相等(true)或不相等(false)。
**5.3 优先级和结合性**
关系运算符的优先级比算术运算符低,比逻辑运算符高。关系运算符的结合性是从左到右。
**代码示例:**
```c
#include <stdio.h>
int main() {
int a = 10, b = 5;
printf("a < b: %d\n", a < b); // false
printf("a > b: %d\n", a > b); // true
printf("a <= b: %d\n", a <= b); // false
printf("a >= b: %d\n", a >= b); // true
printf("a == b: %d\n", a == b); // false
printf("a != b: %d\n", a != b); // true
return 0;
}
```
0
0