如何用c语言实现循环左移

发布网友 发布时间:2022-04-22 06:50

我来回答

9个回答

热心网友 时间:2022-04-21 12:54

循环左移时,用从左边移出的位填充字的右端,而循环右移时,用从右边移出的位填充字的左侧。这种情况在系统程序中时有使用,在一些控制程序中用得也不少。  设有数据说明:

a=01111011,循环左移2位 正确结果: 11101101

过程:

b=a>>(8-2) 用来得到正常左移丢失的位和循环移位后其正确位置 b=00000001;

a=a<<2;左移 a=11101100

a=a|b; a=11101101

如果不是用中间变量 a=(a>>(8-2))|(a<<2)

总长度N(8 16 32)

循环左移n: (a>>(N-n))|(a>>n)

循环右移n: (a<<(N-n))|(a>>n)

C语言的位运算功能是其区别于其他大多数高级程序设计语言的特色之一,用它可以方便实现一些特殊功能,灵活掌握是用C程序编写系统程序的基础。

扩展资料:

C语言高效编程技巧:

一:以空间换时间

计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题

二:数学方法解决问题 

数学是计算机之母,没有数学的依据和基础,就没有计算机发展,所以在编写程序的时候,采用一些数学方法会对程序的执行效率有数量级的提高。

三:使用位操作

实现高效的C语言编写的第三招----使用位操作,减少除法和取模的运算。

在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作。一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效提高程序运行的效率。

参考资料来源:百度百科-c语言程序设计

热心网友 时间:2022-04-21 14:12

用C语言实现循环左移,有两个办法。
一个是调用循环左移库函数:
_crol_(temp,1);//将变量temp循环左移1位
一个是自己编写循环左移函数,下面以字符型变量循环左移为例:
调用函数定义字符型变量x、y、z(也可以是全局变量)。
x是要循环左移的目标数据,y是变量x的位数,z是期望循环左移的位数。
调用循环左移函数方法:
x=data_rl(x,y,z);//从调用函数返回后变量x循环左移z位
循环左移函数定义:
unsigned char data_rl(unsigned char x,unsigned char y,unsigned char z)
{
unsigned char temp;
temp=x>>(y-z);
x=x<<z;
x=x | temp;
return x;
}

热心网友 时间:2022-04-21 15:47

付费内容限时免费查看回答增加一个全局变量,将循环常数给变量,再对变量做左循环,将变量赋值给P0,

uchar a,b, c;

在主循环中P0=_crol_(P0,1); //P0的值向左循环移动

修改为

c=_crol_(c,1); //P0的值向左循环移动

P0=c;

12

分享1

如何使用单片机 从入门到精通 4个月月薪过万 直送名企!

根据文中提到的单片机为您推荐

如何使用单片机,先学习后付款,0首付学习。如何使用单片机名师授课,1对1辅导,如何使用单片机,20万+学员的共同选择。

bj.chuangkexueyuan.com.cn广告

单片机,华清远见,90天成单片机行业精英

根据文中提到的单片机为您推荐

单片机,先学习后付款,0首付学习。单片机,20万+学员的共同选择。

m.hqyje.com广告

热心网友 时间:2022-04-21 17:38

a是目的数,n为a的位数,i为循环左移的位数
函数名(int a,int n,int i)
{
temp=a>>(n-i);
a=a<<i;
a=a|temp;
return a;
}
这样应该可以吧,你试试

热心网友 时间:2022-04-21 19:46

while(条件)
{
左移运算;
}

没有你自己写撒 .....
while就可以了撒

热心网友 时间:2022-04-21 22:11

#include<stdio.h>
void main()
{
int a=1;
int i;
for(i=0;i<5;i++)
a=a<<1;
printf("%d",a);
}
左移5次

热心网友 时间:2022-04-22 00:52

//本程序的作用是将一个正整数m,如果n>0则将循环左移n位,如果n>0则将m循环右移n位,否则不移动
unsigned int m;
int n;
unsigned int temp = -1; //temp取unsinged int 的最大值
scanf("%u%d", &m, &n); //从键盘得到移位的数据
printf("m=%#x\tn=%#x\n", m, n); //显示刚刚输入的数据,以十六进制形式,带0x
n %= sizeof(unsigned int) * 8; //如果移位的位数超过最大位数unsigned int的总位 //数,则相当于循环一轮

if (n > 0) //左移
{
temp = (temp&m) >> (sizeof(m) * 8 - n); //得到移出去的数据
m = m << n;
m = m | temp; //将移出去的数据补回来
}
else if (n < 0) //右移
{
n = -n;
temp = (temp&m) << (sizeof(m) * 8 - n);//得到移出去的数据
m = m >> n;

m = m | temp;//将移出去的数据补回来 。
}
printf("m=%#x\n", m); //将移位后的m显示

热心网友 时间:2022-04-22 03:50

你是要实现前移到上一个循环吗?

热心网友 时间:2022-04-22 07:05

拜托你们问题说清楚一些

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com