上QQ阅读APP看书,第一时间看更新
2.5 使用移位运算符控制流水灯
2.5.1 逻辑运算符和位运算符
1.逻辑运算符
逻辑运算符用于操作数之间的逻辑运算,操作数可以是各个数据类型,可以是变量也可以是常量。逻辑运算符有逻辑与(符号为&&)、逻辑或(符号为||)、逻辑非(符号为!),其运算功能(真值表)详见表2-9。
表2-9 逻辑运算符的运算功能
逻辑运算法则说明:
(1)逻辑与:A、B两者同时为真(即值为1),则A&&B为真(值为1),否则A&&B为假(值为0)。例如,(3<2)&&(9>3)的值为0,因为(3<2)是不成立的,为假,值为0,而(9>3)是成立的,为真,值为1。
(2)逻辑或:A、B中只要有一个为真,则A B为真(值为1),否则A B为假(值为0)。
(3)逻辑非:若A为真,则!A为假;若A为假,则!A为真。
2.位运算符
位运算符是两个操作数中的二进制位(bit)进行的运算。C语言的位运算符详见表2-10。
2.5.2 使用移位运算符控制流水灯的编程示例
1.任务书
编程使图2-1所示的LED在上电时D7、D6、D5点亮,以0.5s的时间间隔向右流动,每次流动一位(即过0.5s后D6、D5、D4点亮…),这样不断地循环。
表2-10 C语言的位运算符
2.编程思路
一组端口(如P1)从高位到低位依次输出00011111,即P1=00011111B=0x1f(说明:B表示二进制,0x表示十六进制),则能满足上电时D7、D6、D5点亮。通过右移若干位、左移若干位,再按位或,可以实现8位数据高位与低位的交换,完成任务书的要求,详见程序及相应解释。
3.参考程序
4.部分程序代码详解
第09~15行:将D右移n位、左移8-n位,再按位或,可以实现将向右移而移出的n位数转移到左边,下面以(D>>7)|(D<<1)为例进行说明,详见表2-11。
表2-11 移位运算示例