一、运算符的学习使用
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,否定应答,不正确的消息长度,则接收器将忽略此消息.