网站建设资讯

NEWS

网站建设资讯

c语言函数循环左移 c语言左移和循环左移的区别

C语言编程题:移位函数,既能循环左移又能循环右移

#include stdio.h

站在用户的角度思考问题,与客户深入沟通,找到伊通网站设计与伊通网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站制作、成都做网站、企业官网、英文网站、手机端网站、网站推广、申请域名、虚拟空间、企业邮箱。业务覆盖伊通地区。

#include math.h

unsigned fun(unsigned num, int n)

{

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));

}

}

void main(void) 

{

printf("%u\n", fun(2, -34));

}

C语言数组循环左移问题

#include stdio.h

void main()

{

int i,i2,k,k2,n,m,a[20],tmp,tmp2,j=0;

scanf("%d %d",n,m);

for(i=0;in;i++)

a[i] = i+1;

for(i=0;in;i++)

printf("%d  ",a[i]);

printf("\r\n");

/********转换开始*****************/

if(n%m==0)

{

i2 = n/m;

k2 = m;

}

else

{

i2 = n;

k2 = 1;

}

for(k=0;kk2;k++)

{

tmp = a[k];

j = k;

for(i=0;ii2;i++)

{

j = j+n-m;

j = j%n;

tmp2 = a[j];

a[j] = tmp;

tmp = tmp2;

}

}

/********转换结束*****************/

for(i=0;in;i++)

printf("%d  ",a[i]);

printf("\r\n");

}

本来还有一个递归的方案  不过写起来太复杂 不好理解  参数太多

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(dire0)

{

for(i=0;in;i++)

{

temp=value1;

value=1;

if(temp) value|=x;

}

}

else

{

for(i=0;in;i++)

{

temp=value x;

value=1;

if(temp) value|=1;

}

}

}

void main()

{

int x=0x55555555;

fun(x,1,1);

printf("%x",x);

}

c语言 循环左移

#includestdio.h

#define N 10

void fun(int *a,int n,int x) { int i,j,k;

for ( i=0;ix;i++ ) { k=a[0]; for ( j=0;jn-1;j++ ) a[j]=a[j+1]; a[n-1]=k; }

}

void main() { int a[N],i,x;

printf("Enter %d integers: ",N); for ( i=0;iN;i++ ) scanf("%d",a[i]);

printf("Enter x: "); scanf("%d",x);

fun(a,N,x);

printf("After Circle left shift %d bit: ",x); for ( i=0;iN;i++ ) printf("%d ",a[i]);

printf("\n");

}

c语言中 0x38循环左移二位 怎么计算?

C语言中没有循环移位,只有移位。

就是遇到边界时,会被截断的,例如11110000左移2位就是11000000

当然,你这里的0x38,循环左移2位,和左移2位没什么区别,因为边界值都是0,但是像刚刚的11110000的循环左移和左移2位,就相差很大了。

如果你需要循环的话,可以这样使用:

a=0x38;

b=a6;

a=a2;

a=b|a;

a这个时候就是循环左移了两位。

如果需要左移而已,就如三楼所说。

还有,就像3楼说的,左移相当于乘,数会变大,右移相当于除,变小。具体如下:

左移N位,就相当于原来的值乘以2的N次幂;

右移N位,如果非负数的话,就是原来的值除以2的N次幂。

希望对你有用。


网站名称:c语言函数循环左移 c语言左移和循环左移的区别
浏览地址:http://njwzjz.com/article/hpichh.html