运算符优先级
杂项运算符应用
RCC->AHB1ENR|=1<<0; //使能PORTA口时钟
代码测试
#include <stdio.h>
#include <stdlib.h>
#define uint32 unsigned int
#define uint8 unsigned char
void FuncOutputBin(uint32 value)
{
char string[32]={0}; //形参类型uint32最大为32位,因此我这里定义了大小为32的字符串数组存放
itoa(value, string, 2);
printf("库函数得到的二进制为:%s\r\n",string);
}
int data=0;
int main(){
data|=1<<0;
// printf("data= %d\r\n",data);
FuncOutputBin(data);
data=0;
data|=1<<1;
// printf("data= %d\r\n",data);
FuncOutputBin(data);
data=0;
data|=1<<2;
// printf("data= %d\r\n",data);
FuncOutputBin(data);
data=0;
data|=3<<0;
// printf("data= %d\r\n",data);
FuncOutputBin(data);
data=0;
data|=3<<1;
// printf("data= %d\r\n",data);
FuncOutputBin(data);
data=0;
data|=3<<2;
// printf("data= %d\r\n",data);
FuncOutputBin(data);
data=0xff;
FuncOutputBin(data);
data|=3<<0;
// printf("data= %d\r\n",data);
}
运行结果
解析:
data|=1<<0;等于data=data|1<<0;
data|=1<<0;将当前data数据从右向左数的第0位设置为1;
data|=3<<2;等于data=data|3<<2;
data|=3<<2;将当前data数据从右向左数的第2、3位设置为1;
结论:
遇到data|=1<<n;将data的二进制的数据的从右向左数的第n位设置为1;
变形:
data|=1<<n;可以将1写成一下几个方式,
data|=3<<n;
data|=5<<n;
data|=0x10<<n;
data|=0x0F<<n;
等,需要自己理解计算,将data的二进制的数据的从右向左数的第几位设置为1;
USART1->CR1&=~(1<<3); //设置OVER8=0 先清除原来的设置
代码测试
#include <stdio.h>
#include <stdlib.h>
#define uint32 unsigned int
#define uint8 unsigned char
void FuncOutputBin(uint32 value)
{
char string[32]={0}; //形参类型uint32最大为32位,因此我这里定义了大小为32的字符串数组存放
itoa(value, string, 2);
printf("库函数得到的二进制为:%s\r\n",string);
}
int data=0xff;
int main(){
printf("data= %d\r\n",data);
FuncOutputBin(data);
data&=~(1<<3);
printf("data= %d\r\n",data);
FuncOutputBin(data);
}
运行结果
结论:
遇到data&=~(1<<n);将data的二进制的数据的从右向左数的第n位设置为0;
变形:
data&=~(1<<n);可以将1写成一下几个方式,
data&=~(3<<n);
data&=~(5<<n);
data&=~(0x10<<n);
data&=~(0xff<<n);
等,需要自己理解计算,将data的二进制的数据的从右向左数的第几位设置为0;
mantissa<<=4;
移位运算测试
#include <stdio.h>
#include <stdlib.h>
#define uint32 unsigned int
#define uint8 unsigned char
void FuncOutputBin(uint32 value)
{
char string[32]={0}; //形参类型uint32最大为32位,因此我这里定义了大小为32的字符串数组存放
itoa(value, string, 2);
printf("库函数得到的二进制为:%s\r\n",string);
}
int mantissa=0x01;
int main(){
printf("mantissa= %d\r\n",mantissa);
mantissa<<=4;
printf("mantissa= %d\r\n",mantissa);
FuncOutputBin(mantissa);
}
运行结果
RCC->CFGR&=~(3<<0); //清零
#include <stdio.h>
#include <stdlib.h>
#define uint32 unsigned int
#define uint8 unsigned char
void FuncOutputBin(uint32 value)
{
char string[32]={0}; //形参类型uint32最大为32位,因此我这里定义了大小为32的字符串数组存放
itoa(value, string, 2);
printf("库函数得到的二进制为:%s\r\n",string);
}
int mantissa=0xff;
int main(){
printf("mantissa= %d\r\n",mantissa);
mantissa&=~(3<<0);;
printf("mantissa= %d\r\n",mantissa);
FuncOutputBin(mantissa);
}