Zigbee-位操作


一. 基本概念

& 两个位都为1时,结果才为1
| 两个位都为0时,结果才为0
^ 异或 两个位相同为0,相异为1
~ 取反 0变1,1变0
<< 左移 各二进位全部左移若干位,高位丢弃,低位补0
>> 右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)
&=、|=、 ^=、<<=、>>= 复合运算 a &=b ==> a=a&b

二. 介绍及用途

一. 与运算

1. 取一个数的指定位

取数 X=1010 1110 的低4位
    1.找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 1111,
    2.将X与Y进行按位与运算(X&Y=0000 1110)

2. 清零

如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。

3. 判断奇偶

二进制的最后一位若为0, 在十进制中,最后一位为偶数, 同理, 最后一位为1, 为基数

if 101 % 2:
    print('偶数')
else:
    print('奇数')
--------------------------------------------        
if 101 & 1:
    print('奇数')
else:
    print('偶数')

二. 或运算

1. 常用来对一个数据的某些位设置为1

将数 X=1010 1110 的低4位设置为11.找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 11112. 然后将X与Y进行按位或运算(X|Y=1010 1111

三. 异或运算

1. 翻转指定位

将数 X=1010 1110 的低4位进行翻转,
    1. 找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 11112. 然后将X与Y进行异或运算(X^Y=1010 0001

四. 左移运算符

定义:将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。

设 a=1010 1110,a = a<< 2 将a的二进制位左移2位、右补0,即得a=1011 1000。
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。

五. 右移运算

定义:将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。

 a=a>>2 将a的二进制位右移2位,左补0 或者 左补1得看被移数是正还是负。
操作数每右移一位,相当于该数除以2

六. 复合运算

&=        例:a&=b    相当于     a=a&b

|=        例:a|=b    相当于     a=a|b

>>=      例:a>>=b   相当于     a=a>>b

<<=      例:a<<=b     相当于   a=a<<b

^=        例:a^=b    相当于   a=a^b

三. 练习

1.当变量X的第n位需清0,其它位不变,可使用:
        X &= ~(1 << n);    
注: 
    1 << n: 1向左移动n位,扩大2^n倍
     X = X & (~(1 << n)),

2.当变量X的第n位需置1,其它位不变,可使用:
        X |= (1 << n);

3.当需要检测Px的第n位是否为0时,可以使用 :
        if((Px & (1 << n))==0),
        else 输出

4.当需要检测Px的第n位是否为1时,可以使用 :
        if((Px | (~(1 << n))) ==1),
        else 输出

文章作者: 梵星
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 梵星 !
  目录