登录
首页 PLC论坛 PLC论坛
回帖 发帖
正文

主题:请教,通讯出来的数据处理。两个16位数据怎样合并为一个32位数据

点击:3695 回复:16

这种转换在触摸屏里面(截图是威纶通软件)勾一勾就可以了
附件 微信截图_20230206154511.jpg
23-02-06 15:47
了解。活到老学到老。谢谢
23-02-06 19:59
你好有两个问题想请教下:
1,把D10传给K2M8,K2M8表示8个位元件,最大表示的数字为255,如果D10大于255不是会出错吗?
2,
附件 2.jpg
我对这个例子一脸懵,如何知道这个数据表示负数?取反+1又是什么操作?
24-12-03 15:19

引用 514076529 在 2024/12/3 15:19:19 发言【内容省略】

1.肯定会乱套
2.具体如何转换的我也不清楚
但是在PLC里面的十六进制 FF FF EC 78 转换成十进制就是-5000
附件 微信截图_20241203170838.jpg
24-12-03 17:12

引用 YXBK 在 2024/12/3 17:12:46 发言【内容省略】

既然会那样,为什么还那样用?!是D10的数值不可能大于255吗?
24-12-03 17:35

引用 514076529 在 2024/12/3 17:35:07 发言【内容省略】

在我1楼的回复里面,D10是不会超出的,因为通讯读出来的最多就是FF,也就是最多8个二进制1。不会有9位出来的。
24-12-03 19:32
AI告诉了答案
FFFFEC78转换成10进制为什么是-5000?
理解FFFFEC78转换成-5000的原因
进制转换的基础知识
十六进制(Hexadecimal): 使用0-9和A-F共16个字符表示数字。
十进制(Decimal): 我们日常使用的计数方式,使用0-9十个数字。
补码表示法: 在计算机中,负数通常用补码表示。正数的补码就是其本身,负数的补码等于其绝对值的补码再加1。
转换过程详解
补码判断:
最高位为1: 表示该数为负数,采用补码表示。
FFFFEC78的最高位F(即1111 in binary)为1,因此它表示一个负数。
求取补码的原码:
求反: 将所有位取反(0变1,1变0),得到00001387。
加1: 在结果上加1,得到00001388。
将二进制转换为十进制:
00001388(二进制) = 5000(十进制)
还原为负数:
由于原数为负数,因此最终结果为-5000。
总结
FFFFEC78这个十六进制数,实际上是-5000的补码表示。通过求补码的原码,再将二进制转换为十进制,最终得到-5000这个结果。
所以,FFFFEC78转换成十进制是-5000,是因为它使用了补码表示法来表示负数。
为什么要用补码?
统一加减运算: 计算机内部采用统一的加法器,无论是正数还是负数的加减运算,都可以看成是补码的加法运算。
简化硬件电路: 补码表示法使得硬件电路的设计更加简单。
拓展
不同位数的表示范围: 16位的有符号整数的表示范围是-32768~32767。
其他进制转换: 二进制、八进制、十进制、十六进制之间可以相互转换。
浮点数表示: 浮点数的表示方式更为复杂,涉及到阶码和尾数。
总结
通过这个例子,我们可以更深入地了解计算机内部是如何表示和处理数据的。补码表示法是计算机体系结构中非常重要的一部分,理解补码的原理有助于我们更好地理解计算机的工作方式。
如果您还有其他关于进制转换或补码表示的问题,欢迎随时提出。
24-12-04 09:38

上一页 上一页

工控新闻

更多新闻资讯