物联网学习教程—位运算符

位运算符

物联网学习教程—位运算符_第1张图片

物联网学习教程—位运算符_第2张图片

真值表似乎与逻辑运算符&&, ||, !类似, 实质上运算中的对象是不同的。上述真值表中的P,Q是一个二进制位,而不是字节或字。 如3&&4, 即两个真值True相与,结果为1。但3&4却要按位表示, 即

物联网学习教程—位运算符_第3张图片

其结果是0。

 

       (2) 位逻辑运算符&(与AND)

       常用于指定某些位清零。 如使整型变量x清零,只要写成x=x&0就可以了;如果使一个字节的第 8 位表示为奇偶校验位并将其设为0,只要ch&127就可以了。

物联网学习教程—位运算符_第4张图片

而要保留某些位,只要这几位和1相与,其它位与0相与即可。 如要求对10011100保留低4位,我们取00001111和原数按位相与,即得00001100。

        ③ 整个数清零,只要本身异或一次即可,即x^x。如x为10011100, 则x^x得0。

物联网学习教程—位运算符_第5张图片

       ④ 交换两个值不用临时变量。如a=3,b=4, 则a=a^b; b=b^a; a=a^b; 即a变成4, b变成3了。 具体请看下列式子:

       (5) 位逻辑运算符~(反NOT)

       是对该运算元素每一位都取反。 如~1在8位二进制数中变成了1111110而不是0。如我们要指定某数x最后一位为0(偶数), 但又不知该数是1字节(char型),2字节(int型)还是4字节(long型),我们只要做x&~1即可。这常用于不同机器间的程序移植。也可用于加密,对一个数求一次反码就变成密码,再对密码求一次反就变成原数了。

  (6) 左移运算符<<使变量中的每一位向左移动,移出的最高位将丢失(溢出),而右端补入0。左移表达式的形式为变量名<<移位的位数

例如:a=15,即00001111,取a=a<<2后, 即a左移两位,变成00111100,即十进制数60。对于无符号数,左移一位相当于乘2,左移 2 位相当于乘4。

(7) 右移运算符>>使变量中的每一位向右移动, 移出的最低位将丢失, 而高端补0(正数)。对于负数,即原最高位为1时,右移一位,高端补0称逻辑右移,高端补1称算术右移,这由计算机系统决定。对于Turbo C是采用算术右移, 即移入1。 右移表达式的形式为:

        变量名>>移位的位数

例如:a=16, 即00001000,取a=a>>2后, 即a右移2位,变为00000010, 即十进制数4。右移一位相当于除2,右移两位相当于除4。

(8) 位运算符中&, |, ^, <<, >>可以与赋值号=组成复合赋值运算符&=, |=, ^=, <<=, >>=。 

       如a=a&b可写成a&=b, 其余类推。 凡算术运算符, 位运算符中的二目运算符均可与赋值号“=”组成复合运算符。

 

你可能感兴趣的:(物联网,嵌入式,IT)