C51和C语言中的左移与右移

C51中左移右移有两种方式

:(其实应该叫循环左移和循环右移)

“_crol_(移动对象,左移的位数)"是左移函数,操作效果是:向左移动,最高位移动到最低位。

例如:

1110左移一位? _crol_(1110,1);——移动后是1101,最高位的1移动到了最低位。

二:(其实应该叫逻辑左移和逻辑右移)

例如:使用的是1110<<1语句,移动之后是1100,最低位补0.

 

C语言中的(其实应该叫算数左移和算数右移)

例如:5<<3=40,其实就是101<<3 = 101000 = 2^5+2^3 = 40

 

逻辑左移时,最高位丢失,最低位补0;

逻辑右移时,最高位补0,最低位丢失;

算术左移时,依次左移一位,尾部补0,最高的符号位保持不变。

算术右移时,依次右移一位,尾部丢失,符号位右移后,原位置上复制一个符号位;

循环左移时,将最高位重新放置最低位

循环右移时,将最低位重新放置最高位

使用循环操作的一个目的就是把每一位连续放到最左边,以判定数据的符号。如果要把一个数字的高位部分和低位部分互换,采用一位操作就很方便,速度很快。
 

  • 15
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用C51单片机的GPIO口来控制流水灯的移动方向。首先,你需要连接两个按键到C51单片机的GPIO口上,并设置GPIO口的输入模式。然后,你需要编写断服务程序来检测按键按下的事件,并根据按键的状态来改变流水灯的移动方向。最后,你需要编写控制流水灯的程序,使用定时器来控制流水灯的移动速度。下面是一个简单的代码示例: ```c #include <reg52.h> sbit LED=P1^0; sbit KEY1=P2^0; sbit KEY2=P2^1; bit key1_down = 0; // 记录 KEY1 是否按下 bit key2_down = 0; // 记录 KEY2 是否按下 bit direction = 0; // 记录流水灯的移动方向,0 表示向左移动,1 表示向右移动 void delay(unsigned int t) // 延时函数 { unsigned int i, j; for(i=0; i<t; i++) { for(j=0; j<125; j++); } } void key1_isr() interrupt 0 // KEY1 断服务程序 { if(KEY1 == 0) // 检测按键是否按下 { key1_down = 1; direction = 0; // 设置流水灯向左移动 } else { key1_down = 0; } } void key2_isr() interrupt 2 // KEY2 断服务程序 { if(KEY2 == 0) // 检测按键是否按下 { key2_down = 1; direction = 1; // 设置流水灯向右移动 } else { key2_down = 0; } } void main() { EA = 1; // 开启总断 EX0 = 1; // 开启外部断0(KEY1) IT0 = 1; // 设置外部断0为下降沿触发 EX1 = 1; // 开启外部断1(KEY2) IT1 = 1; // 设置外部断1为下降沿触发 while(1) { if(direction == 0) // 向左移动 { LED = 0x01; delay(100); LED = 0x02; delay(100); LED = 0x04; delay(100); LED = 0x08; delay(100); } else // 向右移动 { LED = 0x08; delay(100); LED = 0x04; delay(100); LED = 0x02; delay(100); LED = 0x01; delay(100); } } } ``` 在上面的代码,我们使用外部断来检测按键的状态,并在断服务程序改变流水灯的移动方向。在主程序,我们根据流水灯的移动方向来控制流水灯的移动。注意,我们在控制流水灯移动的同时,使用延时函数来控制流水灯的移动速度。你可以根据需要调整延时的时间来改变流水灯的移动速度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值