1. c语言问题,有关负数的循环移位
#include<stdio.h>
int main()
{int x=-1024,n=4,i;
printf("x=%d ",x);
for(i=31;i>-1;i--)
{printf("%d",(x>>i)&1);
if(i%4==0)printf(" ");
}
for(i=1;i<=n;i++)
x=((x&0x8000000)!=0)|(x<<1);
printf(" 循环左移%d位以后,x=%d ",n,x);
for(i=31;i>-1;i--)
{printf("%d",(x>>i)&1);
if(i%4==0)printf(" ");
}
return 0;
}
2. C语言中的循环移位计算
因为是按8进制输入的,8进制的24换成10进制就是20,换成2进制就是00010100(以1字节表示)。而00010100循环右移2位后就是00000101,即10进制的5,而5按8进制输出(输出格式为%o),就是5。
00010100循环左移2位后是01010000,用10进制表示就是80,而80按8进制输出(输出格式为%o),就是120。
3. c语言如何将二维数组行列循环移位
#include<stdio.h>
#defineN5
intmain(){
inti,j,m,n,a[N][N];
printf("inputmn:");
scanf("%d%d",&m,&n);
while(m>0)m-=N;
while(n>0)n-=N;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
a[i][j]=i*N+j+1;
for(i=0;i<N;i++){
for(j=0;j<N;j++)
printf("%-3d",a[(N-m+i)%N][(N-n+j)%N]);
printf(" ");
}
return0;
}
input m n:1 1
25 21 22 23 24
5 1 2 3 4
10 6 7 8 9
15 11 12 13 14
20 16 17 18 19
4. C语言问题——循环移位
#include"stdio.h"
intmain(intargc,char*argv[]){
unsignedinta,n,t;
printf("Inputa&n(inta,n>=0)... ");
if(scanf("%d%d",&a,&n)!=2||a<0||n<0||n>32){
printf("Inputerror,exit... ");
return0;
}
t=a>>n;
printf("Theresultis%u ",(a<<=(32-n))|=t);
return0;
}
运行样例:
5. 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));
}
6. C语言中怎么能通过移位指令与简单逻辑运算实现循环移位,
比如说 循环右移
inta=100;
intlen=sizeof(int)*8;
intt=a&1;
a>>1;
a|=t<<(len-1)
左移类似。