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

主题:补码问题求助

点击:2021 回复:12

请看下例求HF0F0F0F0补码程序:
X10接通前的程序如下图:
附件 45F0F163775048F5A45DDFF95A7C975A.jpg
X10接通后的程序如下图:
附件 EE3835AB7F1D440DB47F0F00438213E2.jpg
[size=4]1、计算机里的数都以补码形式存在,既然X10接通前后都是在求原码的补码,为什么求出来的不同,前一个是-3856,而后一个却是3856呢?
2、HF0F0F0F0是一负数,求出来的补码不也应会是负数-3856吗?为什么X10接通后,求出来的补码是正数3856呢?[/size]
最后修改:2017/7/10 8:02:37
17-07-10 07:49
补码好像是反码加1
17-07-10 09:11
如楼上所说,补码的定义是反码加1
对于有符号数,符号位(最高位)在反码的过程中发生变换,就是正变负,负变正。
你干脆用无符号方式或者二进制方式查看不是更好,何必换算10进制
17-07-10 12:08
   用台达WPLSoft试了一下,或可如此理解:
   1. 负数在PLC内用其补码存放(二进制),将HF0F0F0F0送到D11D10后,则D11、D10分别为HF0F0、HF0F0(16位二进制数);而HF0F0(B11110000 11110000)最高位是1,所以是负数。
   因此,查看到的十进制数-3856,其二进制补码就是HF0F0;3856的二进制数B00001111 00010000取反,得B1111000011101111,加1,得B1111000011110000(HF0F0),即-3856的补码。
   2. 而NEG指令求得的结果,是符号位相反了,可能不是我们理解意义上的求补码;或者,负数去掉符号位再求。
   (现在才发觉,如何求补码,不大记得了,不知符号是如何考虑的;以上只是通过程序仿真结果,反推过来的)
最后修改:2017/7/10 13:06:39
17-07-10 13:04
是你想错了。转不过弯。补码不是原数。
负数的意思就是这样来理解:
假如最高位是1,那这个数就是负数,这是符号位,保留-号。
然后补码表示负多少。
F0F0表示负数,保留最高位为负号-,剩下的取反加1,等于F10(3856),表示这个数是-3856.
F0F0表示-3856(负数的表达方法),你已经计算补码了,怎么还会是原数呢?
17-07-10 16:30
有点乱,现在只用DNEGP指令对32位D10求补码操作。
X10接通前的程序如下图:
附件 4D39ECBE16BF4F75A48F5915D6C9230A.jpg
在上面程序中原码HF0F0F0F0是以补码形式显示的,它是一个负数,所以它显示-252645136。
在X10接通后,可以看到所求补码为252645136,它是一个正数,如下图所示:
附件 C095A5FE30AC4936BD85805BCECB8851.jpg
最后修改:2017/7/10 21:58:34
17-07-10 21:57
下面不用NEG指令,而用取反加1指令进行求补码操作 。
X10接通前的程序如下图所示。
附件 4FA9580CAF89493894254C6797D69E28.jpg
X10接通后的求补码程序如下图所示。
附件 BEFC52E49FF54AF3BFCE05ACB08B840E.jpg
看来这个用取反加1指令求补码的程序运行结果和用NEG求补码指令求补码操作所得到的结果是一样的。
17-07-10 22:20
当把HF0F0F0F0存入D11D10时,机器就认为它是补码了;其原码是-0F0F0F10(K-252645136)。
可以将K-252645136存入,不作运算时,查看其补码。
负数以补码形式存放,只要是最高位为1的二进制数,就认为是补码。
至于求补指令的意义,台达指令的说明是“本指令可将负数的BIN值转换成绝对值”(编程软件自带的指令“索引”)。
17-07-11 13:17
补码HF0F0F0F0,其原码为H8F0F0F10(-252645136),它的最高位表示它是一个负数,是一个用补码表示的负数 。若要得到一个负二进制补码的数值,需要对其补码全部按位取反,然后再末位加1,得到H0F0F0F10(252645136)。这个求补过程应该可理解为求补码的绝对值的过程 .
最后修改:2017/7/12 7:51:32
17-07-11 23:14
   谢谢赏分表情
   有时也可以是这样,比如:
   原码、反码、补码的概念,归其概念;NEG指令的功能,归其功能。两者先分开来,需要时再看其联系(或有无联系)。
   至于指令的名称,字面意义觉得不怎么落实的、就不去落实其字面意义;就如脑白金的“年轻态”,不是吃了就一定会年轻态,而只是其产品的一个标志。
   若是为了便于记忆而理解,或许其名称求补码,可以认为是“对补码求”;时间一久,习以为常后,也就不需要解释了。
   但这种思维方式,不一定人人适合;因为,每个人都可能有自己的思维特点。
   有时,看不懂他人的东东,有可能是因为未适应其思维。
17-07-12 12:25

上一页下一页

工控新闻

更多新闻资讯