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));
}
② 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。
③ 如何用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程序編寫系統程序的基礎。
(3)c語言循環移位擴展閱讀:
C語言高效編程技巧:
一:以空間換時間
計算機程序中最大的矛盾是空間和時間的矛盾,那麼,從這個角度出發逆向思維來考慮程序的效率問題
二:數學方法解決問題
數學是計算機之母,沒有數學的依據和基礎,就沒有計算機發展,所以在編寫程序的時候,採用一些數學方法會對程序的執行效率有數量級的提高。
三:使用位操作
實現高效的C語言編寫的第三招----使用位操作,減少除法和取模的運算。
在計算機程序中,數據的位是可以操作的最小數據單位,理論上可以用「位運算」來完成所有的運算和操作。一般的位操作是用來控制硬體的,或者做數據變換使用,但是,靈活的位操作可以有效提高程序運行的效率。
④ 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;
}