单片机运用比较多的运算符:位运算符

2019-04-15 18:11发布

位运算符 一、图表 位运算符 描述 & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 说明:在位运算符中,除~以外,均为双目(元)运算符,及要求两侧各有一个运算量;且运算量只能是整型或字符型的数据,不能为实型数据。 二、按位与 1、“&”,双目运算符,其功能是参与运算的两数个对应的二进位相与。只有对应的两个二进位为1时,其值为1;否则皆为0. 例如:1&1=1,1&0=0,0&0=0; 2、计算 10&7=2 二进制为: 10=0000 1010,7=0000 0111; 0000 1010 & 0000 0111   0000 0010=2 3、按位与的作用 通常用来对某些位清0或保留某些位。 例如:有一个数时0110 1101,希望保留从右边开始第三四位: 0110 1101 & 0000 1100   0000 1100 总结:
  1. 想保留的那几位都为0,那除这几位外,皆为0,这几位为1或0皆可。
  2. 想保留的那几位都为1,那除这几位外,皆为0,这几位只能为1。
  3. 想保留的那几位有1和0,那除这几位外,皆为0,这几位,为1的取1,其它取0.
三、按位或 1、“|”,双目运算符,其功能是参与运算的两数各对应的二进位相或。只要对应的两个二进位有一个为1,其值为1,否则皆为0. 0|0=0,0|1=1,1|1=1 2、计算:6|2=6 二进制为: 6=0000 0110,2=0000 0010 0000 0110 |    0000 0010      0000 0110 常用来让源操作数的某些位置为1,其它位不变。 四、按位异或 1、“^”,双目运算符,其功能是参与运算的两数各对应的二进位相异或;当两对应的二进位相异时,结果为1. 0^0=0,0^1=0,1^1=0; 2、计算:10^5=15 二进制:10=0000 1010,5=0000 0101 0000 1010 ^    0000 0101      0000 1111 充分利用按位异或的特性,可以实现以下效果:
  1. 设置一个二进制掩码mask,执行s=s^mask,设置特定位置是1,可以使特定位的值取反;设置掩码中特定位置的其它位是0,可以保留原值。
设有0111 1010,想使其低四位反转,即1变0,0变1.可将它与0000 1111进行^运算。
  1. 不引入第三变量,交换两变量的值。想将a,b的值互换,可以用以下语句:
a=a^b; b=b^a; a=a^b; 五、按位取反  “~”,单目运算符,具有右结合性,其功能是对参与运算的数的各二进位按位求反。 例如:~9的运算为~(0000 1001),结果为1111 0110; 六、左移运算符 1、“<<”,双目运算符,功能:把“<<”左边运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数。 无符号数:是针对二进制来讲的,无符号数的表数范围是非负数;全部二进制均代表数值,没有符号位。即第一个"0"或"1"来表示正负。 通俗来说,就是整串数左移,高位的不要,低位补0 2、计算: n=1;二进制为:0000 0001 n<<2:  0000 0001——>0000 0100=4 n<<6:  0000 0001——>0100 0000=6 n=128; 二进制为:1000 0000 n<<1;  1000 0000——>0000 0000 注意:左移一位相当于该数乘以2,但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。这里就出现了溢出现象,如果数据最高位和符号位不同的话,说明这个数字的绝对值已经超过 64 了,那么左移一位后必然溢出。所以一个【有效的】左移最高位和数据最高位必然一致。故算术左移和逻辑左移一样。溢出和计算结果不正确是两码事。 七、右移运算符 1、“>>”,双目运算符,功能:把“>>”左边运算数的各二进位全部右移若干位,由“>>”右边的数指定移动的位数。 通俗来说,就是整串数右移,高位补0,低位不要。 2、计算: n=2;二进制:0000 0010 n<<1:  0000 0010——>0000 0001=1 其原理与左移类似。