|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請(qǐng)高手指點(diǎn):按位倒序的算法 |
| 作者:ZYORK 欄目:單片機(jī) |
對(duì)單片機(jī)用C51編程時(shí)遇到一個(gè)情況,就是原來(lái)高位在前、低位在后的一個(gè)LONG形變量需要按位倒序成低位在前、高位在后的新變量,我只需要其中的位16-位0。 我采用的辦法是把這個(gè)LONG型變量定義在bdata區(qū),然后按位聲明sbit b1=var^1,再用手動(dòng)的方式一位一位的移動(dòng),此時(shí)還需要注意的就是在單片機(jī)中LONG形變量存放時(shí)是低字節(jié)在前高字節(jié)在后的,因此最后會(huì)比較麻煩 請(qǐng)問(wèn)各位高手有沒(méi)有簡(jiǎn)便一些同時(shí)還能夠節(jié)省bdata區(qū)的算法呢,請(qǐng)指教! |
| 2樓: | >>參與討論 |
| 作者: ARMANDLEG 于 2005/6/6 3:45:00 發(fā)布:
無(wú)符號(hào)整數(shù)的 無(wú)符號(hào)整數(shù)的給你一段碼子吧,做過(guò)測(cè)試,好象可以用的 unsigned int rev(unsigned int x) { unsigned CHAR hbrev[]={0,8,4,0xc,2,0xa,6,0xe,1,9,5,0xd,3,0xb,7,0xf}; unsigned int y; y = hbrev[x/4096] + hbrev[(x%4096)/256]*16 + hbrev[(x%256)/16]*256 + hbrev[x%16]*4096; return y; } void main() {unsigned int y; unsigned x = 0x83ac; //1001001110101100---->0011010111000001 0x35c1 y = rev(x); } |
|
| 3樓: | >>參與討論 |
| 作者: ARMANDLEG 于 2005/6/6 3:47:00 發(fā)布:
補(bǔ)充 寫得有點(diǎn)亂,rev里直接寫“return hbrev[x/4096] + hbrev[(x%4096)/256]*16 + hbrev[(x%256)/16]*256 + hbrev[x%16]*4096;”就可以了,不必定義什么鳥(niǎo)y的,呵呵 |
|
| 4樓: | >>參與討論 |
| 作者: zyork 于 2005/6/6 21:14:00 發(fā)布:
呵呵,高,實(shí)在是高! 本質(zhì)上應(yīng)該還是逐個(gè)倒序,但是是按照四個(gè)二進(jìn)制位為一組查表進(jìn)行,提高了運(yùn)行效率,節(jié)省了空間,呵呵,果然很厲害啊,多謝了,以此類推也可以得出LONG型的算法來(lái)了 另外,這位大哥是不是經(jīng)常通宵啊,呵呵,很榮幸得到你的指點(diǎn)!! |
|
| 5樓: | >>參與討論 |
| 作者: rigelkent 于 2005/6/11 21:52:00 發(fā)布:
建議取余和除法運(yùn)算改成強(qiáng)制類型轉(zhuǎn)換到CHAR型指針,效率高n倍 ((CHAR*)&x)[0] ((CHAR*)&x)[1] ((CHAR*)&x)[2] ((CHAR*)&x)[3] 每句只要一條到3條匯編代碼,除法和取余耗費(fèi)幾百條。 |
|
| 6樓: | >>參與討論 |
| 作者: mmax 于 2005/6/11 23:29:00 發(fā)布:
我的笨辦法,^_^ 一個(gè)笨辦法,不開(kāi)數(shù)組 偽代碼 unsigned int y = 0; CHAR i = 0; for(i=0; i<16; i++) { if( x & 0x8000 ) { y += 1; } x <<= 1; y <<= 1; } 沒(méi)有試過(guò),只是一個(gè)想法。 自認(rèn)為特點(diǎn)是:程序空間小,執(zhí)行效率不是很高。 |
|
| 7樓: | >>參與討論 |
| 作者: 西安周公 于 2005/6/12 0:50:00 發(fā)布:
兩個(gè)變量加進(jìn)位位 (C)按位左右移循環(huán) |
|
| 8樓: | >>參與討論 |
| 作者: yadog 于 2005/6/12 10:01:00 發(fā)布:
re 學(xué)習(xí) |
|
| 9樓: | >>參與討論 |
| 作者: zyork 于 2005/6/14 22:36:00 發(fā)布:
多謝各位的指點(diǎn)啊,受益匪淺 其實(shí)我用的存儲(chǔ)器并沒(méi)有這樣要求,是我理解錯(cuò)了,不過(guò)也就有了這個(gè)意外收獲了,呵呵 |
|
| 10樓: | >>參與討論 |
| 作者: qqkevin 于 2005/12/14 15:35:00 發(fā)布:
菜鳥(niǎo)弱弱地問(wèn)一下 ((CHAR*)&x)[0] ((CHAR*)&x)[1] ((CHAR*)&x)[2] ((CHAR*)&x)[3] 這句話是什么意思啊?為什么這樣做就可以答到想要的效果呢? |
|
| 11樓: | >>參與討論 |
| 作者: javie 于 2005/12/14 15:37:00 發(fā)布:
是強(qiáng)制轉(zhuǎn)換 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |