单片机定点运算得不到正确的结果,为什么呢?

2020-02-09 09:37发布

请教:为什么PIC24FJ64GA006在运算
unsigned long int j;
j = 53248+12800;
时,得不到正确的结果?
j的长度足够长呀。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
feng200808
1楼-- · 2020-02-10 00:00
 精彩回答 2  元偷偷看……
o11o
2楼-- · 2020-02-10 03:10
有可能,本来就是16位机
longfeixue
3楼-- · 2020-02-10 03:25
我MCC18编译器上试验了,以下四种语句,结论如下:
unsigned long j;
1.
j = 0;
j=53248+12800+2048;//结果正确0x00010A00

2.
j=0;
j=0xD000+0x3200+0x800;//结果错误0x00000A00

3.
j=0;
j=(unsigned long)(0xD000+0x3200+0x800); //结果错误0x00000A00

4.
j=0;
j=(unsigned long)0xD000+0x3200+0x800; // 结果正确0x00010A00

后三种情况我都理解,原因就是C语言的老问题,也可能是局限与PIC的编译器,数据被自动截断了,因此在赋值之前,必须对运算结果进行强制类型转换。但是第1中情况,不知道为啥就正确了,按说结果也应该被截断才对。谁另有见解?

一周热门 更多>