打印
[开发工具]

pmlab x 里面小减大会出问题?

[复制链接]
905|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
navy_yang|  楼主 | 2019-5-14 10:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 小卡 于 2019-5-16 11:55 编辑

我在PMLAB X 里面定义了两个unsigned int的数,在做减法的时候发现一个现象:98-99 结果是65535,0-1000的结果是64536。是无符号的数,为何会这样?
在编译器里面可以设置么?编译器是XC8-1.41

一头雾水。

使用特权

评论回复
沙发
navy_yang|  楼主 | 2019-5-14 10:59 | 只看该作者
我想要的结果是小减大结果为0,该在哪里设置?

使用特权

评论回复
板凳
淘猫汤姆| | 2019-5-14 11:36 | 只看该作者
无符号可不就是这样么,没见过减法还自带限幅的

使用特权

评论回复
地板
淘猫汤姆| | 2019-5-14 11:38 | 只看该作者
你得用计算机体系来理解这个问题,借位进位在底层是不会变的。有小减大的需求就用有符号,或者事先判断大小

使用特权

评论回复
5
oxygenzz| | 2019-5-14 18:03 | 只看该作者
98-99 结果为 65535,是产生了借位,STATUS寄存器中C比特置位,指示这种情况。

这个减法真实的结果是-1, 只有使用有符号数才能正确表达负数。
开发者需要确保程序中的计算结果,在任何情况下,都是使用最合适的数据类型来表达。
否则程序就会出错。这一点是需要格外当心的。

使用特权

评论回复
6
xuanhuanzi| | 2019-5-14 23:44 | 只看该作者
你自己都知道无符号,你还问个负数怎么显示。

使用特权

评论回复
7
xuanhuanzi| | 2019-5-14 23:57 | 只看该作者
当然显示没错,是你定义类型有错。

使用特权

评论回复
8
xuanhuanzi| | 2019-5-14 23:57 | 只看该作者
这跟Mplab无关,这个是C语言本身的特性。

使用特权

评论回复
9
ayb_ice| | 2019-5-15 11:50 | 只看该作者
严重怀疑你不是专业编程的

使用特权

评论回复
10
CoolSilicon| | 2019-5-16 08:41 | 只看该作者
基础C语言的数据类型的问题...翻翻书吧.

使用特权

评论回复
11
小卡| | 2019-5-16 11:55 | 只看该作者
加分类 

使用特权

评论回复
12
Rock007| | 2019-5-17 13:10 | 只看该作者
这个和环境没关系。
用带符号数据类型来解决你的问题吧。

使用特权

评论回复
13
小卡| | 2019-5-21 11:39 | 只看该作者
是MPLAB

使用特权

评论回复
14
internally| | 2019-5-23 15:35 | 只看该作者
无符号数的溢出。如果你想要小减大等于0,那在减之前加一个判断就好了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

225

帖子

1

粉丝