【C语言-提高篇】

运算符优先级

在这里插入图片描述

杂项运算符应用

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);   
   
}

运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

秃突兔兔突秃

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

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

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

打赏作者

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

抵扣说明:

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

余额充值