您的位置:首页 > 编程语言 > C语言/C++

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

2015-09-17 21:12 761 查看
问题之编程语言_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型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: