C语言位操作
#define Bit(i) (0x01<<i)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
- [C语言按位清0和置1操作(位运算符合移位运算符组合)\_位运算清零-CSDN博客](https://blog.csdn.net/changyi9995/article/details/109251325)
![C语言 | 嵌入式位操作精华技巧汇总_编程开发](https://cdn.jsdelivr.net/gh/qiaorunpu/blog-img/img/202312271450119.webp)
# 异或操作
> [史上最通俗易懂的异或运算详解【含例题及应用】-CSDN博客](https://blog.csdn.net/weixin_43899069/article/details/121048025?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-121048025-blog-9025535.235^v39^pc_relevant_yljh&spm=1001.2101.3001.4242.1&utm_relevant_index=1)
# 与 或
> [C语言 | 嵌入式位操作精华技巧汇总\_51CTO博客\_嵌入式c语言基础](https://blog.51cto.com/u_15244533/2845299)
- 与1相或,置1
```c
TEST = TEST | 0x01;
//第几位要置1就左移几位。
TEST |= (0x01 << n);
GPIOA->ODR |= (uint16_t)0x0400; /* PA10输出高(置1操作) */与0相与,置0
1 | TEST &= 0xF0; |
二、嵌入式中位操作一些常见用法
1、一个32bit数据的位、字节读取操作
(1)获取单字节:
1 |
(2)获取某一位:
1 | #define GET_BIT(x, bit) ((x & (1 << bit)) >> bit) /* 获取第bit位 */ |
2、一个32bit数据的位、字节清零操作
(1)清零某个字节:
1 | #define CLEAR_LOW_BYTE0(x) (x &= 0xffffff00) /* 清零第0个字节 */ |
(2)清零某一位:
1 | #define CLEAR_BIT(x, bit) (x &= ~(1 << bit)) /* 清零第bit位 */ |
3、一个32bit数据的位、字节置1操作
(1)置某个字节为1:
1 | #define SET_LOW_BYTE0(x) (x |= 0x000000ff) /* 第0个字节置1 */ |
(2)置位某一位:
登录后复制
1 | #define SET_BIT(x, bit) (x |= (1 << bit)) /* 置位第bit位 */ |