c语言学习8位运算
1位运算
1.1位运算符:
对某个位进行操作
符号:
①按位与 :
& 数据1 & 数据2
将数据AB转换为二进制,按位与,对应位有0则0全1为1
用于将数据中某一位操作,其他位不变如将0xef其中第x位为0
:0不能移动,可以将对应位为一然后取反~(0xef|(0x01<<x))
A&=~(1<<X)
A&=~(3<<X)//011 ,多位清零
②按位或 :
| 数据1 | 数据2
将数据AB转换为二进制,按位与,对应位有1则1全0为0
将x位置1:0xef&(0x01<<x);
A|=(1<<X)
③ 按位取反 :
~ 每一位0变1,1变0
④似按位异或 :
^ 数据1 | 数据2,异时取或(不同时为1)
⑤按位左移 :
<< 数据<<左移位数 按位左移低位补0
结果取决于赋值给什么变量(运算过程中的自动转换),从低到高截位
(没有高位溢出)
U8 a;
a<<=2;//此时a与2整型发生运算,自动向上转换 空间变为int
规则:整体左移,低位补零。
数据二进制左移1位(10倍)十进制形式扩大2倍数
⑥按位右移:
>> 数据>>右移位数 按位右移动高位补0。
⑦位运算符优先级:
~
<< >>
& ^ |
2位运算的综合应用
对数据操作
2.1数据合成
①把两个8位数据合成一个16位数据
- B,合成C
U8 a;
U16 b;
U32 c;
C=A<<16|B;
C=B<<8|A;
2.2截取数据
截取一个数据的高字节部分
u16 a=0xffee;
U8 b=a>>8;//(挤出低字节)
截取一个数据中间字节
①右移挤出低字节
②定义一个适当变量收取对应字节
3位运算操作寄存器控制led灯
需求控制led灯亮灭
GPIO
分析:
3.1说明1:
LED连接在某个GPIO口上
要使用GPIO口初始化配置IO口
配置某个IO口,实际是配置寄存器对应位
寄存器相当于一个32位的变量
配置寄存器的某个位实际上相当于对变量的某个位操作
3.2说明2:
STM32GPIO口分组,具体分几组根据芯片型号决定
每组编号0~15即16个IO口
组编号形式:GPIOA GPIOB......
3.3说明3
首先要知道具体要配置那个IO口
具体这个IO口的配置过程
3.4配置过程:
确定IO口:查看原理图
具体配置:
打开芯片中文参考手册
MODE模式寄存器:输入00 输出01 服用10 模拟11
GPIOC->MODE=GPIOC->MODE&~(3<<8)//(结构体指针)
GPIOC->MODE=GPIOC->MODE|(1<<8)
OTYPER输出类型寄存器GPIOC->OTYPER //五号位写0,配置推挽输出
OSPEEDR输出速度寄存器 00 2mhz 01 25mhz 01 50mhz 11尽量不写
ODR端口输出数据寄存器 1输出高电平0输出低电平。reserved(保留)
时钟使能:查看数据手册,查找挂载的位置
AHB.....
RCC->AHB1ENR=RCC->AHB1ENR|(1<<2)
C第2位,1使能.