您现在所在的是:

PLC论坛

回帖:5个,阅读:1067 [上一页] [1] [下一页]
2173
蝶舞
文章数:150
年度积分:50
历史总积分:2173
注册时间:2010/1/2
发站内信
发表于:2010/8/25 15:40:23
#0楼
请教一下比如32767+4=-32765 溢出位ON 怎样根据溢出位计算出结果+32771呢。


[此贴子已经被jint于2010/8/25 15:45:18编辑过]
37007
cvlsam 版主
文章数:12385
年度积分:1359
历史总积分:37007
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2010/8/25 17:03:53
#1楼
你首先要解决16位存储空间如何存放大于32767的符号整数的问题,才能解决上述的问题。

其次,如果需要用32位来存储,那么转换为长整型数不就可以了?

Regards
2173
蝶舞
文章数:150
年度积分:50
历史总积分:2173
注册时间:2010/1/2
发站内信
发表于:2010/8/25 17:44:49
#2楼
这只是作为一种思维的延伸,想了好久也没想出来,比如,D0里面是+32767   D1里面是+4    相加后结果放D2里面,这时D2的结果必然是-32765,溢出位必然ON,然后根据溢出位把D0加D1变成长整形放D4里面,当然要是没溢出就不计算了,结果就放D2里面了。
37007
cvlsam 版主
文章数:12385
年度积分:1359
历史总积分:37007
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2010/8/25 20:47:37
#3楼
以下是引用蝶舞在2010/8/25 17:44:49的发言:
这只是作为一种思维的延伸,想了好久也没想出来,比如,D0里面是+32767   D1里面是+4    相加后结果放D2里面,这时D2的结果必然是-32765,溢出位必然ON,然后根据溢出位把D0加D1变成长整形放D4里面,当然要是没溢出就不计算了,结果就放D2里面了。

难道你在运算前,要为每个D区域都留一个空位出来,以保证能扩展为32位?

那直接用32位岂不是更好?

如果不留空位,那么扩展后导致后续数据丢失,程序混乱你又如何去避免呢?

Regards
2173
蝶舞
文章数:150
年度积分:50
历史总积分:2173
注册时间:2010/1/2
发站内信
发表于:2010/8/26 10:47:38
#4楼
谢了C侠的回答,32767+4=-32765   我的意思是能不能找到一种规律把-32765变成32771,知道一般这样的情况都用双整。
37007
cvlsam 版主
文章数:12385
年度积分:1359
历史总积分:37007
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2010/8/26 11:18:26
#5楼
32771已经溢出了,超过了存储单元的存储范围,数据失真了,已经无意义了……作为程序员,你应该多考虑一下如何去确保不溢出。

Regards

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

62.4004