#include stdio.h
梅列ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
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);
}
首先對(duì)比一下 左邊與右邊 那里有不同 同時(shí) 程序不同對(duì)應(yīng)的輸出結(jié)構(gòu)有哪些不同。。
P2口 連接8個(gè)LED 低電平驅(qū)動(dòng)使其發(fā)光。
P2=0xfe //上電 P2.0連接的 LED發(fā)光。 其余的熄滅。
對(duì)比一下程序
void main() //主函數(shù)
{
P2=0xfe; //P2初始化
while(1) //死循環(huán)
{
num=P2; //這里 與左邊不同 把P2的狀態(tài)給 NUM 也就是0XFE num=0xfe
P2=_crol_(num,1); //P2等于num 循環(huán)左移 P2=0xef 這時(shí)應(yīng)該是連接的P2.7的LED發(fā)光
delay(0);//延遲
}
}
左邊 代碼 NUM 每次大循環(huán) 都賦值 num=0xfe 是固定的 所以不管你以后怎么移動(dòng) P2口的輸出都是不變得 只移動(dòng)了一次。。
循環(huán)左移時(shí),用從左邊移出的位填充字的右端,而循環(huán)右移時(shí),用從右邊移出的位填充字的左側(cè)。這種情況在系統(tǒng)程序中時(shí)有使用,在一些控制程序中用得也不少。設(shè)有數(shù)據(jù)說明:
a=01111011,循環(huán)左移2位 正確結(jié)果: 11101101
過程:
b=a(8-2) 用來得到正常左移丟失的位和循環(huán)移位后其正確位置 b=00000001;
a=a2;左移 a=11101100
a=a|b; a=11101101
如果不是用中間變量 a=(a(8-2))|(a2)
總長(zhǎng)度N(8 16 32)
循環(huán)左移n: (a(N-n))|(an)
循環(huán)右移n: (a(N-n))|(an)
C語言的位運(yùn)算功能是其區(qū)別于其他大多數(shù)高級(jí)程序設(shè)計(jì)語言的特色之一,用它可以方便實(shí)現(xiàn)一些特殊功能,靈活掌握是用C程序編寫系統(tǒng)程序的基礎(chǔ)。
擴(kuò)展資料:
C語言高效編程技巧:
一:以空間換時(shí)間
計(jì)算機(jī)程序中最大的矛盾是空間和時(shí)間的矛盾,那么,從這個(gè)角度出發(fā)逆向思維來考慮程序的效率問題
二:數(shù)學(xué)方法解決問題
數(shù)學(xué)是計(jì)算機(jī)之母,沒有數(shù)學(xué)的依據(jù)和基礎(chǔ),就沒有計(jì)算機(jī)發(fā)展,所以在編寫程序的時(shí)候,采用一些數(shù)學(xué)方法會(huì)對(duì)程序的執(zhí)行效率有數(shù)量級(jí)的提高。
三:使用位操作
實(shí)現(xiàn)高效的C語言編寫的第三招----使用位操作,減少除法和取模的運(yùn)算。
在計(jì)算機(jī)程序中,數(shù)據(jù)的位是可以操作的最小數(shù)據(jù)單位,理論上可以用“位運(yùn)算”來完成所有的運(yùn)算和操作。一般的位操作是用來控制硬件的,或者做數(shù)據(jù)變換使用,但是,靈活的位操作可以有效提高程序運(yùn)行的效率。
參考資料來源:百度百科-c語言程序設(shè)計(jì)
#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");
}
循環(huán)移位就是把數(shù)值變成二進(jìn)制,然后循環(huán)移動(dòng)的過程。
換句話說,循環(huán)移位就是將移出的低位放到該數(shù)的高位(循環(huán)右移)或把移出的高位放到該數(shù)的低位(循環(huán)左移),左移,和右移動(dòng)都是對(duì)整數(shù)進(jìn)行的操作,在Win32控制臺(tái)應(yīng)用程序中,整形占4Byte節(jié)32bit。
循環(huán)左移的過程可以分為3步:
1、將x左端的n位先移動(dòng)到y(tǒng)的低n位中,x(32-n);
2、將x左移n位,其右面低位補(bǔ)0,xn;
3、進(jìn)行按位或運(yùn)算(x (32 - n) | (x n));
循環(huán)右移的過程可以分為3步:?
1、將x的左端的低n位先移動(dòng)到y(tǒng)的高n位中x(32-n)
2、將x右移n位,其左面高n位補(bǔ)0xn;
3、進(jìn)行按位或操作(x (32 - n) | (x n));
擴(kuò)展資料
C語言實(shí)現(xiàn)循環(huán)移位:循環(huán)移位是對(duì)二進(jìn)制序列進(jìn)行操作,所以實(shí)現(xiàn)循環(huán)移位先需要將需要移位的數(shù)轉(zhuǎn)換為二進(jìn)制序列,然后按照上面描述的步驟進(jìn)行移位,最后將移位后的二進(jìn)制序列打印出來。
所謂循環(huán)移位是指在移位時(shí)不丟失移位前原范圍的位,而是將它們作為另一端的補(bǔ)入位。例如循環(huán)右移n位,指各位右移n位,原來的低n位變成高n位,指各位右移n位,原來的低n位變成高n位。
用到循環(huán)移位的操作時(shí),在匯編里面是比較容易實(shí)現(xiàn)的,ror,rol指令就行了。利用位運(yùn)算進(jìn)行循環(huán)移位操作比較容易理解。如果不是循環(huán)移位,使用xn(左移n位),xn右移n位。
參考資料來源:百度百科—循環(huán)移位運(yùn)算
#include?stdio.h
#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));
}
標(biāo)題名稱:c語言中的循環(huán)左移函數(shù) C語言循環(huán)右移
網(wǎng)站路徑:http://aaarwkj.com/article28/docpijp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、服務(wù)器托管、面包屑導(dǎo)航、企業(yè)建站、關(guān)鍵詞優(yōu)化、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)