左移运算:<<
a<<b
a=182;转换成二进制形式 1011 0110
b=1时,最左边的1被移走了,最右边添0。a<<b=01101100
b=4时,最左边的4位被移走了,最右边添0。a<<b=0110 0000
右移运算:>>
运算法则:无符号操作数右移若干位后,低位丢弃,高位补0。
把a中的高4位和b中的低4位取出来,a中的高4位在前,b中的低4位在后,合并出一个新的数c,怎么做呢?
P1<<=1; //把P1口的内容左移一位再赋值给P1
a>>=4; //把a的内容右移4位再赋值给a变量
位运算
在二进制位的级别上进行的一系列运算。
按位与运算:&
运算法则:有 0 出 0,全 1 出 1
a | b | a&b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
x&0=0 //× 代表 0 或者1
x&1=x //x 代表0 或者1
xxxx xxxx x代表0或者1
&1111 0000
xxxx 0000
按位或运算:
运算法则:有1 出 1,全0出 0
a | b | a | b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
x | 0=x //x代表0或者1
x | 1=1 //x代表0或者1
xxxx xxxx
|0011 1100
xx11 11xx
按位异或运算:
运算法则:相同为0,不同为1
a | b | a^b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
P1=P1^0x5b
11110000
^ 01011011
10101011
按位取反运算:~
运算法则:把1变0,把0变1
a | ~a |
---|---|
0 | 1 |
1 | 0 |
P1=~P1;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cmXRAc4K-1680017998979)(./assets/image-20230328221431845.png)]
按位与&:将一个二进制数的指定位清0
按位或|:将一个二进制数的指定位置1
按位异或^:将一个二进制数的指定位取反
按位取反~:将一个二进制数的所有位都取反
P1=P1&0xf0
P1=P1|0x3a
P1=P1^0x5b
P1=~P1
P1&=0xf0
P1|=0x3a
P1^=0x5b