循環移位就是把數值變成二進制,然后循環移動的過程。
網站建設哪家好,找創新互聯公司!專注于網頁設計、網站建設、微信開發、重慶小程序開發公司、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了建德免費建站歡迎大家使用!
換句話說,循環移位就是將移出的低位放到該數的高位(循環右移)或把移出的高位放到該數的低位(循環左移),左移,和右移動都是對整數進行的操作,在Win32控制臺應用程序中,整形占4Byte節32bit。
循環左移的過程可以分為3步:
1、將x左端的n位先移動到y的低n位中,x(32-n);
2、將x左移n位,其右面低位補0,xn;
3、進行按位或運算(x (32 - n) | (x n));
循環右移的過程可以分為3步:?
1、將x的左端的低n位先移動到y的高n位中x(32-n)
2、將x右移n位,其左面高n位補0xn;
3、進行按位或操作(x (32 - n) | (x n));
擴展資料
C語言實現循環移位:循環移位是對二進制序列進行操作,所以實現循環移位先需要將需要移位的數轉換為二進制序列,然后按照上面描述的步驟進行移位,最后將移位后的二進制序列打印出來。
所謂循環移位是指在移位時不丟失移位前原范圍的位,而是將它們作為另一端的補入位。例如循環右移n位,指各位右移n位,原來的低n位變成高n位,指各位右移n位,原來的低n位變成高n位。
用到循環移位的操作時,在匯編里面是比較容易實現的,ror,rol指令就行了。利用位運算進行循環移位操作比較容易理解。如果不是循環移位,使用xn(左移n位),xn右移n位。
參考資料來源:百度百科—循環移位運算
循環左移時,用從左邊移出的位填充字的右端,而循環右移時,用從右邊移出的位填充字的左側。這種情況在系統程序中時有使用,在一些控制程序中用得也不少。設有數據說明:
a=01111011,循環左移2位 正確結果: 11101101
過程:
b=a(8-2) 用來得到正常左移丟失的位和循環移位后其正確位置 b=00000001;
a=a2;左移 a=11101100
a=a|b; a=11101101
如果不是用中間變量 a=(a(8-2))|(a2)
總長度N(8 16 32)
循環左移n: (a(N-n))|(an)
循環右移n: (a(N-n))|(an)
C語言的位運算功能是其區別于其他大多數高級程序設計語言的特色之一,用它可以方便實現一些特殊功能,靈活掌握是用C程序編寫系統程序的基礎。
擴展資料:
C語言高效編程技巧:
一:以空間換時間
計算機程序中最大的矛盾是空間和時間的矛盾,那么,從這個角度出發逆向思維來考慮程序的效率問題
二:數學方法解決問題
數學是計算機之母,沒有數學的依據和基礎,就沒有計算機發展,所以在編寫程序的時候,采用一些數學方法會對程序的執行效率有數量級的提高。
三:使用位操作
實現高效的C語言編寫的第三招----使用位操作,減少除法和取模的運算。
在計算機程序中,數據的位是可以操作的最小數據單位,理論上可以用“位運算”來完成所有的運算和操作。一般的位操作是用來控制硬件的,或者做數據變換使用,但是,靈活的位操作可以有效提高程序運行的效率。
參考資料來源:百度百科-c語言程序設計
#include?stdio.h
#include?math.h
unsigned?fun(unsigned?num,?int?n)
{
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));
}
}
void?main(void)?
{
printf("%u\n",?fun(2,?-34));
}
首先對比一下 左邊與右邊 那里有不同 同時 程序不同對應的輸出結構有哪些不同。。
P2口 連接8個LED 低電平驅動使其發光。
P2=0xfe //上電 P2.0連接的 LED發光。 其余的熄滅。
對比一下程序
void main() //主函數
{
P2=0xfe; //P2初始化
while(1) //死循環
{
num=P2; //這里 與左邊不同 把P2的狀態給 NUM 也就是0XFE num=0xfe
P2=_crol_(num,1); //P2等于num 循環左移 P2=0xef 這時應該是連接的P2.7的LED發光
delay(0);//延遲
}
}
左邊 代碼 NUM 每次大循環 都賦值 num=0xfe 是固定的 所以不管你以后怎么移動 P2口的輸出都是不變得 只移動了一次。。
#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);
}
網站名稱:c語言循環左移右移函數 c語言實現循環右移
文章來源:http://m.kartarina.com/article46/hgsseg.html
成都網站建設公司_創新互聯,為您提供商城網站、App設計、網站改版、網站收錄、定制網站、靜態網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯