#include?stdio.h
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到伊通網(wǎng)站設(shè)計(jì)與伊通網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋伊通地區(qū)。
#include?math.h
unsigned?fun(unsigned?num,?int?n)
{
if(n??0)
{
//sizeof(unsigned)*8計(jì)算變量所占位數(shù),如int型占32位
return?(num??(sizeof(unsigned)*8?-?n))?|?(num??n);?//先高位移動(dòng),再低位移動(dòng)后,兩者按位或,相當(dāng)把低位溢出的又添加到了高位,實(shí)現(xiàn)了循環(huán)的效果?
}?
else?
{
return?(num??(sizeof(unsigned)*8?-?abs(n)))?|?(num??abs(n));
}
}
void?main(void)?
{
printf("%u\n",?fun(2,?-34));
}
#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");
/********轉(zhuǎn)換開(kāi)始*****************/
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;
}
}
/********轉(zhuǎn)換結(jié)束*****************/
for(i=0;in;i++)
printf("%d??",a[i]);
printf("\r\n");
}
本來(lái)還有一個(gè)遞歸的方案 ?不過(guò)寫(xiě)起來(lái)太復(fù)雜 不好理解 ?參數(shù)太多
#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);
}
#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語(yǔ)言中沒(méi)有循環(huán)移位,只有移位。
就是遇到邊界時(shí),會(huì)被截?cái)嗟?,例?1110000左移2位就是11000000
當(dāng)然,你這里的0x38,循環(huán)左移2位,和左移2位沒(méi)什么區(qū)別,因?yàn)檫吔缰刀际?,但是像剛剛的11110000的循環(huán)左移和左移2位,就相差很大了。
如果你需要循環(huán)的話,可以這樣使用:
a=0x38;
b=a6;
a=a2;
a=b|a;
a這個(gè)時(shí)候就是循環(huán)左移了兩位。
如果需要左移而已,就如三樓所說(shuō)。
還有,就像3樓說(shuō)的,左移相當(dāng)于乘,數(shù)會(huì)變大,右移相當(dāng)于除,變小。具體如下:
左移N位,就相當(dāng)于原來(lái)的值乘以2的N次冪;
右移N位,如果非負(fù)數(shù)的話,就是原來(lái)的值除以2的N次冪。
希望對(duì)你有用。