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