3.3 位逻辑运算符

更新于 2026年10月10日 版权声明
3.3 位逻辑运算符

51单片机的存储器中有一部分的存储器是允许位操作的,单片机应用系统开发时对I/O端口的操作也是非常频繁的,因此往往要求程序在位(bit)一级进行运算或处理。C51语言直接面对51单片机硬件,提供了强大的位运算功能,使得C语言也能像汇编语言一样用来编写系统程序、单片机控制程序。

C51提供了6种位运算符,见表3-6。

表3-6 位运算符

图示

3.3.1 位运算符

1.按位与运算(参与运算的数以补码方式出现)

(1)清零特定位(mask中特定位置0,其他位为1,s=s&mask)。

例如:把a的高八位清0,保留低八位,a=4560(10001110010000)。

可作&255运算(255的二进制数为0000000011111111):

图示

(2)取某数中指定位(mask中特定位置1,其他位为0,s=s&mask)。

例如:取末三位 |(1101101->101)|x&7

2.按位或运算(参与运算的数以补码方式出现)

常用来将源操作数某些位置1,其他位不变(mask中特定位置1,其他位为0,s=s|mask)。

例如:将数据101100最后一位置1,即实现101100->101101

位运算实现方法:x|1

将数据101101最后一位清0,即实现101101->101100

位运算实现方法:x|1-1

3.按位异或运算(参与运算的数以补码方式出现)

(1)使特定位的值取反(mask中特定位置1,其他位为0,s=s^mask)。(https://www.daowen.com)

例如:9^5的结果为

00001001^00000101 =00001100

(2)不引入第三变量,交换两个变量的值(设a=a1,b=b1),见表3-7。

表3-7 不引入第三变量,交换两个变量的值

图示

4.求反运算

求反运算符“~”为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位求反。

例如:~9的运算为

~(0000000000001001)=1111111111110110

3.3.2 移位运算

1.“≪”(左移)

一般形式:操作数1≪操作数2

功能:把“≪”左边的操作数1的各二进制位全部左移若干位,移动的位数由“≪”右边的操作数2决定,移动时高位丢弃,低位补0。

例如:a=00000011(十进制3),执行a≪4,即将a的各二进位向左移动4位,00000011左移4位后为00110000(十进制数48)。

相当于a×2n(n为左移的位数),即3×24=48。

2.“≫”(右移)

一般形式:操作数1≫操作数2

功能:把“≫”左边的操作数1的各二进制位全部右移若干位,移动的位数由“≫”右边的操作数2决定,移动时低位丢弃,如果是正数,高位补0;如果是负数,高位补0或补1,由所用的计算机系统决定。

例如:a=00001111(十进制15),执行a≫2,即将a的各二进位向右移动2位,00001111右移2位后为00000011(十进制数3。)

相当于a/2n(n为右移的位数),即15/22=3。

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)