Keil工程中的C语言的基础学习(持续更新)

 一、运算符的学习使用

1.1 移位运算符

左移运算符和右移运算符
使用对象:一般为进制数(10进制,2进制,16进制等..)

a = 0x01;
#define b (a<<1)  
	
//将变量a 16进制转换位2进制,得到01;
//01左移1位,得到10;
//(实际上左移1位就是换成2进制换算就是×2)(右移同理÷2)

移位运算符有什么作用?

举个例子:按键的使用,现在有二个按键:一个Key_Up,一个Key_Down

按键按下为高电平(高电平有效)

Key_Init = (Key_Up | (Key_Down<<1) );

这样有一个按键按下,我们就能根据Key_Init得到反馈,然后在进行处理。

1个变量4个状态

01:Key_Up打开,Key_Down关闭

11:Key_Up打开,Key_Down打开

10:Key_Up关闭,Key_Down打开

00:Key_Up关闭,Key_Down关闭

1种变量4个状态清晰可见。

如若不然我们还需要检测Key_Up和Key_Down两个变量,然后二个变量四个状态。

[  if((Key_Up=0)&&(Key_Down=1)) 各种if,else,=1,=0 啥的然后还&&和||的,可读性和操作性就特别差和麻烦  ]

如果按键在加上组合按键的话,在加上先后顺序,你懂的。

1.2 按位与&运算符

A=(B & C)                                                                      

& C=1 C=0
B=1 1 0
B=0 0 0

例:B=0x16   C=0x38  求A

先将16进制转换为2进制数

B=0001 0110

C=0011 1000

然后进制按位与运算(根据上面表格)得到

A=0001 0000  (0x10)

有什么作用?

1、清0 (例如:1001 1111 ,我现在想让他变成1000 0000,就让 (1001 1111 &1000 0000)就可得到

2、保留指定位 (例如 一个数与 1011 1001进行按位与运算,就可使这个数 的1位保存下来,也可以保留低位和高位,具体那个位置看功能需求)

应用:

比如说我接收一个低4位的数据,用接收到数据&0xf运算,若超出最大理论值4或者等于0,否定应答,不正确的消息长度,则接收器将忽略此消息.

  

Guess you like

Origin blog.csdn.net/qq_51679917/article/details/130154692
Recommended