C51中如把4个unsigned char 组成32位的unsigned long,运算最快

2020-02-05 09:21发布

比如unsigned char a,b,c,d
unsigned long e
常规的赋值方式为e=a*256^3+b*256^2+c*256^1+d;
在8位机中,实际e还是有4个8位的数来保存,可不可以直接把a,b,c,d放入4个8位内存单元中。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
hailing
2020-02-06 06:59
手机回复的现在在电脑上看不到了。
使用KEIL测试了下
AT89S52,软件仿真,1MHz;

        a=0x12;
        b=0x34;
        c=0x56;
        d=0x78;
        e=a*16777216+b*65536+c*256+d;
        316us/ 1MHz


                a=0X12;
        b=0X34;
        c=0X56;
        d=0X78;
        ((unsigned char *)&e)[0]=a;
                ((unsigned char *)&e)[1]=b;
                        ((unsigned char *)&e)[2]=c;
                                ((unsigned char *)&e)[3]=d;
                                16us/1m

union                               
{
        unsigned long e;
        struct
        {
                unsigned char _1;
                unsigned char _2;
                unsigned char _3;
                unsigned char _4;
        }e0;
}ea;
void main(void)
{

        a=0X12;
        b=0X34;
        c=0X56;
        d=0X78;
        ea.e0._1=a;
        ea.e0._2=b;
        ea.e0._3=c;
        ea.e0._4=d;
        ea.e=0;
//16us /1m

直接乘积相加316us,而指针和联合体只要16us,指针和联合体反汇编直接对long的4个字节赋值了,最高效的方法。

一周热门 更多>