返回列表 发布新帖

无符号数据类型的转换、比较及运算解决方案

408 0
发表于 2024-7-10 18:16:53 | 查看全部 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
解决方案

1. 转换

无符号数据类型的转换相对比较容易。如果是小转大,先清空目标数据,然后直接将源数据传送至目标数据的低字节或字;如果是大转小,则要先判断目标数据是否会溢出,如果会,则直接将目标数据赋最大值,如果不会,将源数据的低字节或字传送至目标数据,这里,我增加了大转小的间接溢出功能(如有溢出,SM1.1会置位)。

有 无符号数据的转换,当然就有无符号和实型数据的相互转换需求。这里我增加了"B_R"、"W_R"、"DW_R"、"ROUND_B"、"ROUND_W"、"ROUND_DW"、"TRUNC_B"、"TRUNC_W"和"TRUNC_DW",分别是无符号字节转实型、无符号整型转实型、无符号双整型转实型、实型四舍五入小数后转无符号字节、实型四舍五入小数后转无符号整型、实型四舍五入小数后转无符号双整型、实型丢弃小数后转无符号字节、实型丢弃小数后转无符号整型、实型丢弃小数后转无符号双整型。关于整型和实型数据的相互转换,我在这里不详细说明,有兴趣的朋友可以去查阅相关资料。

另外,由于系统没有SByte数据类型,当然就没有相应的转换指令,基于此,我增加了"SB_I"、"SB_DI"和"SB_R",即有符号字节转有符号整型、有符号字节转有符号双整型和有符号字节转实型。

2. 比较

无符号数据类型的比较是利用系统现有有符号比较指令实现的。具体办法是将数分成负数和非负数两部分,那么两个相互比较的数就有四种排列组合,即非负数和非负数比较、非负数和负数比较、负数和负数比较、负数和非负数比较,四种情况比较后即可得到想要的bool结果。其实从应用结果来看,可以归纳成同号比较和异号比较。

另外,我的无符号数据比较指令中没有"=="指令,是因为可以利用系统现有有符号"=="比较指令进行比较,而不影响比较结果。

同样,由于系统没有SByte数据类型,我增加了">SB"、">=SB"、"<SB"、"<=SB",即有符号字节大于比较指令、有符号字节大于等于比较指令、有符号字节小于比较指令和有符号字节小于等于比较指令。

3. 运算

无符号数据类型的运算解决方案我还在思考中,目前初步想到的是用门电路去做,但这样做带来缺点很明显。有比较好的解决思路的兄弟朋友可以提供参考一下,感谢支持。运算指令后面完善后奉上。



说明:

1. 此程序为无偿奉献,不喜勿喷,程序已做测试和应用,但仍可能存在BUG,使用者风险自担;

2. 程序软件版本为STEP 7-MicroWIN SMART V2.6,请使用不低于此版本的软件打开;

3. 双精度整型LDint和双精度浮点型LReal在实际应用中较少,故本次不涉及。

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2001-2025 英威腾技术论坛 版权所有 All Rights Reserved. 粤ICP备07504406号
关灯 在本版发帖
扫一扫添加微信客服
返回顶部
快速回复 返回顶部 返回列表