matengfei
攻人之过勿太严,要思其堪受;教人以善勿过高,要令其可从。
级别: 论坛先锋
精华主题: 0
发帖数量: 736 个
工控威望: 1054 点
下载积分: 2482 分
在线时间: 207(小时)
注册时间: 2011-08-07
最后登录: 2017-06-10
查看matengfei的 主题 / 回贴
楼主  发表于: 2012-08-27 16:18
把D0里的数据255进行取反之后怎么会是-256,而不是-65280。把D0以十六位二进制展开前八位是1,后八位是0,取反后前八位是1,后八位是0。这样把后八位的数值加起来是65280,又最高位是符号位所以为-65280。不知哪里错了,求高手指教。
matengfei
攻人之过勿太严,要思其堪受;教人以善勿过高,要令其可从。
级别: 论坛先锋
精华主题: 0
发帖数量: 736 个
工控威望: 1054 点
下载积分: 2482 分
在线时间: 207(小时)
注册时间: 2011-08-07
最后登录: 2017-06-10
查看matengfei的 主题 / 回贴
1楼  发表于: 2012-08-27 17:36
当最高位为1时,也就是负数。那么这个十六位二进制数所代表的数值:所有为0位的数值相加再加1,然后乘以-1,而并非所有为1的位所代表的数值相加再乘以-1。当所有位为0时,D0=0,当所有位为1时,D0=-1,而并非最高位和最低位为1其他位为0时,D0值为-1。详见FX系列编程手册。NEG求补指令的介绍。
cvlsam
富士低压,POD(觸摸屏),PLC专卖
级别: VIP会员

精华主题: 3 篇
发帖数量: 6777 个
工控威望: 38380 点
下载积分: 4183 分
在线时间: 9537(小时)
注册时间: 2006-09-13
最后登录: 2024-12-20
查看cvlsam的 主题 / 回贴
2楼  发表于: 2012-08-27 17:49
255的二进制表示方法为:0000 0000 1111 1111
执行了CML后,其值为 1111 1111 0000 0000

256的二进制表示方法为:0000 0001 0000 0000
负数,在PC中表示为其正数的补码,也就是反码+1
256的反码为:1111 1110 1111 1111
那么补码就是反码+1,也就是1111 1111 0000 0000。

16位符号数据能表示的值域为-32768~+32767,那又怎么可能表达为-65280呢?

Good Luck~
matengfei
攻人之过勿太严,要思其堪受;教人以善勿过高,要令其可从。
级别: 论坛先锋
精华主题: 0
发帖数量: 736 个
工控威望: 1054 点
下载积分: 2482 分
在线时间: 207(小时)
注册时间: 2011-08-07
最后登录: 2017-06-10
查看matengfei的 主题 / 回贴
3楼  发表于: 2012-08-27 18:36
如D0=2,则用十六位(0-15)二进制表示:0000 0000 0000 0010,也就是除第1位(从右向左分别为0-15位)为1,其他位0,取反后为1111 1111 1111 1101,这时除第1位为0外,其他位都为1。这时取反后的数值是多少呢?我们把上面的十六位二进制数为0的位所代表的数值相加然后再加1,得到结果等于3,最高位为1,是负数,所以D0取反后的数值等于-3。求补:我们把求反后的十六位二进制1111 1111 1111 1101加1得到:1111 1111 1111 1110,这时只有第0位为0,第0位代表的数值为1,1加1(计算它所代表的值)等于2。又因最高位为1,是负数,所以1111 1111 1111 1110的值为-2,即D0的补码等于-2。像1111 1111 1111 1110这样给出一个最高位为1的十六位二进制负数,能比较容易的计算它代表的值:所有为0位的位所代表的数值相加再加1然后乘以-1。
matengfei
攻人之过勿太严,要思其堪受;教人以善勿过高,要令其可从。
级别: 论坛先锋
精华主题: 0
发帖数量: 736 个
工控威望: 1054 点
下载积分: 2482 分
在线时间: 207(小时)
注册时间: 2011-08-07
最后登录: 2017-06-10
查看matengfei的 主题 / 回贴
4楼  发表于: 2012-08-27 18:44
个人感觉和求相反数差不多:把十进制数值乘以-1