基于proteus的51单片机仿真实例二十五、C51中移位位运算符演示实例

1、c语言中的移位运算符有两种,左移运算符、右移运算符。
1)左移运算符(<<),其作用是讲一个数的各个二进制位全部左移若干位。例如a=a<<2,表示将a的二进制数左移2位,若a=15,即二进制数00001111,左移2位得到的结果是00111100,再如a=240,即二进制数11110000,左移2位后得到的结果是11000000.其中高位左移后溢出,被舍弃了,低位以0进补。
2)右移运算符(>>),其作用跟左移运算符相反,表示将一个数据的各个二进制位右移若干位,其中移到右端的低位被舍弃,高位以0进补。
 
2、左移和右移运算符有时候可以代替一些乘除运算,这样可以节省cpu的运行时间,提高代码的执行效率。例如1个数据左移1位相当于乘于2,右移一位相当于除以2(此结论只适合在运算结果没有溢出的情况)。
 
3、本实例实现将一个变量执行左移和右移操作运算,并将运算结果在P0口上输出显示
 
4、在keil c51中新建工程ex14,编写如下程序代码,并编译生成ex14.hex文件
//实例14:利用P0口显示变量的左移和右移运算的结果
#include <reg51.h>            //包含头文件
         //
void delay(void)     //延时函数
{
  unsigned int i,j;
 for(i = 0;i < 251;i++)
 for(j = 0;j <251;j++);
}
void main(void)
{
 unsigned char num;    //定义变量
 num = 60;     // 变量赋初值
 P0 = 0xff;     //开始时,P0口的8个LED全部熄灭
 delay();    // 延时一段时间
 delay();
 P0 = num << 2;    //变量左移两位后的结果送到P0口显示
 delay();    // 延时一段时间
 delay();
 P0 = num >> 2;   // 变量右移两位后的结果送到P0口显示
 while(1)    //无限循环,防止程序跑飞
 {
 }
}
 
5、在proteus中新建仿真文件ex14.dsn,电路图如下所示
基于proteus的51单片机仿真实例二十五、C51中移位位运算符演示实例
6、启动仿真,观察运行结果。
可以看到,在程序刚开始运行时,8个LED全部处于熄灭状态。
但执行到变量左移2位后,运行结果如下
基于proteus的51单片机仿真实例二十五、C51中移位位运算符演示实例
执行到变量右移2位后,执行结果如下
基于proteus的51单片机仿真实例二十五、C51中移位位运算符演示实例