c语言循环右移
1. c语言 循环移位
save=x&0x……那一行,你这是多少个字节了?0x表示16进制,每两个字面字符就是一个字节,即8位,你自己数数你的。取最低为应该是与0x00000001,四个字节,刚好32位。
2. C语言方针循环右移
改动的有注释自己看。
代码文本:
int main(int argc,char *argv[]){
int a[10][10];
int m,n,temp=0,i,j,k;
scanf("%d%d",&m,&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
m%=n;//如果输入的m比n大就调整一下内节约时间(不要这句也正容确)
for(i=0;i<n;i++){
for(j=0;j<m;j++){//要右移m位
temp=a[i][n-1];//最右边的元素存着
for(k=n-1;k>0;k--)//第i行右移1位
a[i][k]=a[i][k-1];
a[i][0]=temp;//把最右边的元素放到0位置
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++)
printf("%d ",a[i][j]);
printf(" ");
}
return 0;
}
3. c语言中循环右移怎么实现程序应该怎么写
|unsigned char crol(unsigned char c,unsigned b)
{ //左移
unsigned char left;left=c<<b;
unsigned char right;right=c>>( sizeof (unsigned char )-b) ;
return left|回right;
}
unsigned char cror(unsigned char c,unsigned b)
{ //右移答
unsigned char right;
right =c>>b;
unsigned char left ;
left=c<<( sizeof (unsigned char )-b) ;
return left|right;
}
4. C语言编写一个函数将一个整数循环右移
#include<stdio.h>
#define N 1000
void reverser(int *a,int n,int m)
{
int i,k=0,t;
k=n%m;
for(i=0;i<=(m-1)/2;i++)//将数字换为原来整数的形式
{
t=a[m-1-i];
a[m-1-i]=a[i];
a[i]=t;
}
while(k>0)//移位
{
t=a[m-1];//将最后一个数字暂存!
for(i=m-2;i>=0;i--)//循环向右移位
a[i+1]=a[i];
a[0]=t;//将最后一个数字付给第一个数字
k--;
}
}
int main()
{
int a[N]={0},m=0,k,n,i;
printf("输入你要移位的数:");
scanf("%d",&k);
printf("输入移位多少位:");
scanf("%d",&n);
do{
a[m]=k%10;
k/=10;
m++;
}while(k>0);
reverser(a,n,m);
for(i=0;i<m;i++)
printf("%d",a[i]);
printf(" ");
return 0;
}
我这个里取了一个巧!直接输出了!
5. c语言 循环移位
你要移动什么类型的,字符数组嘛?还是? 字符数组可以参考下面这个
void CircleShift(int buffer[],int shift)
{
int i,j,tt;
int len=sizeof(buffer);
if(shift==0) return;
for(i=0;i<abs(shift);i++)
{
if(shift>0)
{
tt = buffer[len-1];
for(j=len-1;j>0;j--)
buffer[j] = buffer[j-1];
buffer[0] = tt;
}
else
{
tt = buffer[0];
for(j=1;j<len;j++)
buffer[j] = buffer[j+1];
buffer[len-1] = tt;
}
}
}
6. c语言无符号单字节数的八位以内的循环右移循环左移怎么写
|
//参数说明:x=输入的值n移位数
//循环左移
#defineROTATE_LEFT(x,n)((x)<<(n))|((x)>>((8*sizeof(x))-(n)))
//循环右移
#defineROTATE_RIGHT(x,n)((x)>>(n))|((x)<<((8*sizeof(x))-(n)))
//使用例子:
#include<stdio.h>
intmain()
{
unsignedcharz=0x81,r=0,m_MoveBits=1;
r=ROTATE_LEFT(z,m_MoveBits); //循环左移1位
printf("0x%02X循环左移后=0x%02X ",z,r);
z=ROTATE_RIGHT(r,m_MoveBits); //循环右移1位
printf("0x%02X循环右移后=0x%02X ",r,z);
z=1; r=0; //初始化z=1
m_MoveBits=4; //移4位
r=ROTATE_LEFT(z,m_MoveBits); //循环左移1位
printf("0x%02X循环左移后=0x%02X ",z,r);
z=ROTATE_RIGHT(r,m_MoveBits); //循环右移1位
printf("0x%02X循环右移后=0x%02X ",r,z);
return0;
}
7. C语言:写一个函数用来实现左右循环移位。
#include <stdio.h>
void fun(int &value,int n,int dire)
{
if(dire==0) return;
int x=1<<(sizeof(int)*8-1);
int temp;
int i;
if(dire>0)
{
for(i=0;i<n;i++)
{
temp=value&1;
value>>=1;
if(temp) value|=x;
}
}
else
{
for(i=0;i<n;i++)
{
temp=value & x;
value<<=1;
if(temp) value|=1;
}
}
}
void main()
{
int x=0x55555555;
fun(x,1,1);
printf("%x",x);
}
8. 如何用c语言实现循环左移
循环左移时,用从左边移出的位填充字的右端,而循环右移时,用从右边移出的位填充字的左侧。这种情况在系统程序中时有使用,在一些控制程序中用得也不少。设有数据说明:
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程序编写系统程序的基础。
(8)c语言循环右移扩展阅读:
C语言高效编程技巧:
一:以空间换时间
计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题
二:数学方法解决问题
数学是计算机之母,没有数学的依据和基础,就没有计算机发展,所以在编写程序的时候,采用一些数学方法会对程序的执行效率有数量级的提高。
三:使用位操作
实现高效的C语言编写的第三招----使用位操作,减少除法和取模的运算。
在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作。一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效提高程序运行的效率。
9. C语言编程题:移位函数,既能循环左移又能循环右移
#include<stdio.h>
#include<math.h>
unsignedfun(unsignednum,intn)
{
if(n>0)
{
//sizeof(unsigned)*8计算变量所占位数,如int型占32位
return(num>>(sizeof(unsigned)*8-n))|(num<<n);//先高位移动,再低位移动后,两者按位或,相当把低位溢出的又添加到了高位,实现了循环的效果
}
else
{
return(num<<(sizeof(unsigned)*8-abs(n)))|(num>>abs(n));
}
}
voidmain(void)
{
printf("%u ",fun(2,-34));
}
10. c语言循环右移怎么编
默认只有算术右移。 要循环右移需要把最低位保存下来, 然后赋值到最左。
unsignedintfunc(unsignedintn)
{
unsignedintv=n&1;
n>>=1;
if(v)n|=1<<(sizeof(unsignedint)-1);
returnn;
}