问题之编程语言_c语言_无符号计算

来源:互联网 发布:最好的日语翻译软件 编辑:程序博客网 时间:2024/06/05 00:59

问题之编程语言_c语言_无符号计算


1.虽然查了资料大概了解了MCU处理减法的方式,使用加法加上补码,但是在处理一段程序时任然遇到了问题;

程序实现周期性处理一段程序:

u16 Systime,starttime;

    if((Systime-starttime)==SCANSLAVEDATATIMES)
    {
        starttime = Systime;//重新载入时间

        处理数据部分
    }else if((Systime-starttime)>SCANSLAVEDATATIMES){
        starttime = Systime;//重新载入时间
    }       

调试发现程序不会进入else if语句(虽然实际上基本不会进入,但是为了实验,在定时器中周期性将Systime置位0);

经过查证C语言进行减法会强制将u16转换为INT类型,此处将U16换成U32后工作正常,正确语句如下:

u32 Systime,starttime;

    if((Systime-starttime)==SCANSLAVEDATATIMES)
    {
        starttime = Systime;//重新载入时间

        处理数据部分
    }else if((Systime-starttime)>SCANSLAVEDATATIMES){
        starttime = Systime;//重新载入时间
    }       


为证实以上内容,使用下面测试语句,运行与STM32开发板

    u8 a,b;
    u16 c,d;
    u32 e,f;

      
        a=10;
        b=0xfe;
        c=10;
        d=0xfffe;
        e=10;
        f=0xfffffffe;
        printf("\ta-b: %x\r",(a-b));
        printf("\tc-d: %x\r",(c-d));
        printf("\te-f: %x\r",(e-f));

打印结果:

    a-b: ffffff0c
    c-d: ffff000c
    e-f: c

不管什么平台汇编层面都是有符号数,减法都是转成INT型。

0 0
原创粉丝点击