音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場(chǎng)網(wǎng)
技術(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

C語言左移右移請(qǐng)教!

作者:sdllg 欄目:單片機(jī)
C語言左移右移請(qǐng)教!
在總線上出現(xiàn)一個(gè)8位的數(shù)A

A=A7A6A5A4A3A2A1A0,最先出現(xiàn)的是低位A0,依次是A1,A2------A7。

應(yīng)該怎么才能較快的處理成要求的數(shù)B

B=A0A1A2A3A4A5A6A7呢?

想了一天都沒找到比較好的方法,請(qǐng)大家不吝賜教,謝謝!


2樓: >>參與討論
xwj
最快的方法就是--
查表

3樓: >>參與討論
sdllg
詳細(xì)點(diǎn)?
C語言怎么查表法?能否說詳細(xì)點(diǎn)?謝謝!

4樓: >>參與討論
有風(fēng)
試試這樣,用C51的_crol_()及_cror_()
#include <intrins.h>
void main(void)
{
    unsigned CHAR i,a,b;
    a = 0x12;
    b = 0;
    for(i=0; i<8; i++)
    {
        if(_crol_(a,i)&0x80)
            b = _cror_(b | 1,1);
        else
            b = _cror_(b,1);
    }
    while(1);
}

5樓: >>參與討論
sdllg
很好,謝謝!
 
6樓: >>參與討論
xwj
字節(jié)顛倒最快的方法就是查表,以空間換時(shí)間,程序如下
#include <intrins.h>
unsigned CHAR code tab256[256]={
    0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xe0, 0x10,0x90,0x50,0xd0,0x30,0xb0,0x70,0xf0,
    0x08,0x88,0x48,0xc8,0x28,0xa8,0x68,0xe8, 0x18,0x98,0x58,0xd8,0x38,0xb8,0x78,0xf8,
    0x04,0x84,0x44,0xc4,0x24,0xa4,0x64,0xe4, 0x14,0x94,0x54,0xd4,0x34,0xb4,0x74,0xf4,
    0x0c,0x8c,0x4c,0xcc,0x2c,0xac,0x6c,0xec, 0x1c,0x9c,0x5c,0xdc,0x3c,0xbc,0x7c,0xfc,
    0x02,0x82,0x42,0xc2,0x22,0xa2,0x62,0xe2, 0x12,0x92,0x52,0xd2,0x32,0xb2,0x72,0xf2,
    0x0a,0x8a,0x4a,0xca,0x2a,0xaa,0x6a,0xea, 0x1a,0x9a,0x5a,0xda,0x3a,0xba,0x7a,0xfa,
    0x06,0x86,0x46,0xc6,0x26,0xa6,0x66,0xe6, 0x16,0x96,0x56,0xd6,0x36,0xb6,0x76,0xf6,
    0x0e,0x8e,0x4e,0xce,0x2e,0xae,0x6e,0xee, 0x1e,0x9e,0x5e,0xde,0x3e,0xbe,0x7e,0xfe,

    0x01,0x81,0x41,0xc1,0x21,0xa1,0x61,0xe1, 0x11,0x91,0x51,0xd1,0x31,0xb1,0x71,0xf1,
    0x09,0x89,0x49,0xc9,0x29,0xa9,0x69,0xe9, 0x19,0x99,0x59,0xd9,0x39,0xb9,0x79,0xf9,
    0x05,0x85,0x45,0xc5,0x25,0xa5,0x65,0xe5, 0x15,0x95,0x55,0xd5,0x35,0xb5,0x75,0xf5,
    0x0d,0x8d,0x4d,0xcd,0x2d,0xad,0x6d,0xed, 0x1d,0x9d,0x5d,0xdd,0x3d,0xbd,0x7d,0xfd,
    0x03,0x83,0x43,0xc3,0x23,0xa3,0x63,0xe3, 0x13,0x93,0x53,0xd3,0x33,0xb3,0x73,0xf3,
    0x0b,0x8b,0x4b,0xcb,0x2b,0xab,0x6b,0xeb, 0x1b,0x9b,0x5b,0xdb,0x3b,0xbb,0x7b,0xfb,
    0x07,0x87,0x47,0xc7,0x27,0xa7,0x67,0xe7, 0x17,0x97,0x57,0xd7,0x37,0xb7,0x77,0xf7,
    0x0f,0x8f,0x4f,0xcf,0x2f,0xaf,0x6f,0xef, 0x1f,0x9f,0x5f,0xdf,0x3f,0xbf,0x7f,0xff,
};

void main(void)
{
    unsigned CHAR a,b;
    a = 0x12;
    b= tab256[a];
    while(1);
}

/*
    25:     a = 0x12;             //賦值2周期
C:0x010F    7F12     MOV      R7,#0x12    
    26:         b= tab256[a];         //運(yùn)算6周期
C:0x0111    EF       MOV      A,R7    
C:0x0112    900003   MOV      DPTR,#tab256(0x0003)
C:0x0115    93       MOVC     A,@A+DPTR
C:0x0116    F508     MOV      0x08,A

Program Size: data=10.0 xdata=0 code=282
*/

有風(fēng)的程序?yàn)?br>#include <intrins.h>
void main(void)
{
    unsigned CHAR i,a,b;
    a = 0x12;                 //賦值2周期
    b = 0;
    for(i=0; i<8; i++)             //運(yùn)算314周期,是查表程序的52.3倍,也就是說查表的速度比它快51.3倍!
    {
        if(_crol_(a,i)&0x80)
            b = _cror_(b | 1,1);
        else
            b = _cror_(b,1);
    }
    while(1);
}


7樓: >>參與討論
cqwangsf
查表是最快的?!
查表是最快的?!

8樓: >>參與討論
wuyawen
這樣也可以啊
#include <intrins.h>
main()
{
    unsigned CHAR a=0x12;
    unsigned CHAR b=0;
    unsigned int  i;
    b=_cror_(a,6);    
    while(1);

}

9樓: >>參與討論
wuyawen
不好意思,發(fā)少了代碼
 
10樓: >>參與討論
wuyawen
我考慮不周全,
看了XWJ大哥的代碼,學(xué)到不少,謝謝

11樓: >>參與討論
huangxd
別聽我的
ACC^7=A0
ACC^6=A1
ACC^5=A2
ACC^4=A3
ACC^3=A4
ACC^2=A5
ACC^1=A6
ACC^0=A7
B=ACC,那么B的與A就就是反的

12樓: >>參與討論
有風(fēng)
改進(jìn)一下
#include <intrins.h>
void main(void)
{
    unsigned CHAR i,a,b;
    a = 0x12;
    b = 0;
    for(i=0; i<=8; i++)
        b = _cror_( b | _crol_(a,i)&0x01,1);
    while(1);
}

13樓: >>參與討論
有風(fēng)
同意xwj的說法!甘拜下風(fēng)
同意xwj的說法!一般要求速度嚴(yán)格的場(chǎng)合下,用查表是較好的方法。因?yàn)橐粋(gè)表格已經(jīng)將很多算法包含了。
//剛才發(fā)的帖子有小小錯(cuò)誤,i應(yīng)從1算起,如下:
    for(i=1; i<=8; i++)
        b = _cror_( b | _crol_(a,i)&0x01,1);


14樓: >>參與討論
風(fēng)間逝
不要對(duì)ACC操作為好
ACC是被C51屏蔽的變量
雖然可以在程序里面使用
但是可能在計(jì)算的過程中ACC的值就被改變了
因?yàn)锳CC是使用率最高的寄存器之一


15樓: >>參與討論
gbchang
X.7=Y.0的方法直觀不慢,查表方法經(jīng)典/通用性強(qiáng).
 
16樓: >>參與討論
石湖天隨
查表經(jīng)典、快。!
 
17樓: >>參與討論
taoest
我的
i=8;b=0;
while(i--)
{
    b<<=1;
    b|=a&0x01;
    a>>=1;
}
完成

* - 本貼最后修改時(shí)間:2005-4-1 10:23:33 修改者:taoest

18樓: >>參與討論
zizzfish
最好的方法還是嵌入?yún)R編。
 
19樓: >>參與討論
xwj
別人問的可是“C語言”哦,何況
象Keil等成熟的編譯器C和匯編的效率相差不大的,可以看我在6樓的帖子,里面有編譯后的匯編代碼的

當(dāng)然,合適的C寫法也能優(yōu)化代碼和運(yùn)行速度的,比如
i=8;
do
  {循環(huán)}
while(i);
編譯器就會(huì)完美的編譯成
      MOV Rn,8
LOOP: ....
      DJNZ Rn,LOOP

這樣比for(i=0;i<8;i++){}要快得多



20樓: >>參與討論
欣藍(lán)
匯編
用匯編速度快,占用空間少,且容易被別人看懂。

21樓: >>參與討論
cuittao
支持用匯編
支持用匯編

* - 本貼最后修改時(shí)間:2005-4-3 9:15:07 修改者:cuittao

22樓: >>參與討論
我不懂
用C語言:將一個(gè)正整數(shù)m循環(huán)左移或右移n位,如果n>0,則左移;n<0,則右移;n=0,則不移。
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請(qǐng)問4094的最大驅(qū)動(dòng)電流是多少?
問一個(gè)比較老的問題  怎樣燒斷單片機(jī)不用的引腳
請(qǐng)問高手們:一般芯片資料中Icc這個(gè)參數(shù)具體指是什么?
請(qǐng)教:SST單片機(jī)IAP擦寫Flash
高手們,幫幫忙。!
免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)