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)
左移類似。