技术论坛

 回复:如何讲长整型转换成整型?

返回主题列表
作者 主题
violin
侠客

经验值:921
发帖数:252
精华帖:0
楼主    2012-06-27 11:24:30
主题:如何讲长整型转换成整型?
好像没有专门的指令,是不是MOVE指令直接会判断,如果是长整型MOVE到整型,它自动取其中的高16位?
林彪, 烟酒不沾活到63岁 周恩来,只喝酒不抽烟活到73岁 毛泽东,只抽烟不喝酒活到83岁 邓小平,又抽烟又喝酒活到93岁 张学良,吃喝嫖赌抽活到103岁。
Kapok_ZXM
奇侠

经验值:8466
发帖数:720
精华帖:3
12楼    2012-07-04 12:49:14
精华帖  主题:回复:如何讲长整型转换成整型?
quote:以下是引用Kapok_ZF在2012-07-04 12:45:04的发言:
quote:以下是引用n次看你的背影在2012-07-04 10:35:24的发言:
quote:以下是引用Automann在2012-07-04 06:20:29的发言:
假设长整数在MD10里,直接取MW12里的数来用就是了。但是要确保该数不超过INT允许的范围。


尽量严谨些,不多说了,看看实验贴图吧!



N侠:65436(FF9C)正好就是“-100”。

N侠:INT类型的取值范围是-32768~+32767,你附图中的65436是无符号数,转成有符号数,正好就是负整数-100。
低调做人 高调做事
冬日
奇侠

经验值:8680
发帖数:3358
精华帖:56
16楼    2012-09-17 14:00:25
精华帖  主题:回复:如何讲长整型转换成整型?
我也不知道上面在纠结啥
1,如果数值在整数范围内,那么
L dint
t int
两句话就完事了,纠结什么?
2,如果数值不在整数范围内,那么转换根本无从谈起了,又纠结什么?
If anything can go wrong, it will.
万泉河
至圣

经验值:29190
发帖数:10900
精华帖:131
36楼    2012-09-26 07:51:49
精华帖  主题:回复:如何讲长整型转换成整型?
先旗帜鲜明的表明态度,支持冬日和zane。


要讨论DI to I的严谨,就必须充分考虑这个数据流的前世今生。
就是产生这个DI的过程中有没有可能产生长于16位的数据,而转换成I以后对于长于16位的数据又是怎么处理的。

从前世来说,如果这个数值无限大,你为啥还要妄图做一次转换呢?啥目的?老老实实在整个数据流中一直使用DI不就挺好吗?比如要把流量累计值送到WINCC,那也就是建立一个DINT的tag而已。

从后世来说,如果你得到了长于16位的数据,现在产生溢出了,你是给送出0呢还是送出高位部分呢,还是送32767呢?依我看,你给送出啥值,都达不到绝对严谨。
别说你还有error状态字,这个状态字给谁看? 别忘了,你这是PLC,别指望你还能和WINXP一样有个溢出蓝屏的机会!

n次可以把你对error的处理方式再拿出来探讨一下。别说你产生了就不管了啊!
微信公众号:PLC标准化编程,ZHO6371995
万泉河
至圣

经验值:29190
发帖数:10900
精华帖:131
38楼    2012-09-26 08:03:20
精华帖  主题:回复:如何讲长整型转换成整型?
quote:以下是引用小釉在2012-09-25 07:55:09的发言:
我还是比较支持n侠的
以n侠的例子来说,如果是负数的话,MD100 负数的符号位在M100.7
当用move转换的时候,M100.7是传不到MW102中区的。


小釉担心的负数时的处理问题,说明你是对数据的结构相当不清楚。
对于一个16位以内的负值,如果它是放在32位里面的,那么整个高位字里面填充的都是1,所以每一位都是符号位!
就比如-1是 1111 1111 1111 1111 1111 1111 1111 1111 。你即便去掉前面的16位的1,最后得到的还是-1 。
就是说,你担心的M102.7的符号位的地方,原本存放的就是1。
这一点,用WIN7里面的计算器,打到程序员模式,可以看的很清楚。
计算机科学的科学家们,显然比你更早的想到了这一点!
微信公众号:PLC标准化编程,ZHO6371995
emil128
侠圣

经验值:3827
发帖数:271
精华帖:10
39楼    2012-09-26 11:04:27
精华帖  主题:回复:如何讲长整型转换成整型?
支持一下万版
这里对于万版说的关于负数处理的问题,给点理论依据。

在CPU内所有的整型数都是以补码形式存放的,补码的最高位是符号位。
根据补码的符号延展原则,将一个特定位数补码系统的数字要以较多位数表示时(比如8bit到16bit或者16bit到32bit),所有增加的高比特都要填入原数字的符号位。
所以在数据截取时,只要数值没有超过截取后能表示的范围,那么截取后的最高位仍旧与原值的符号位相同。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。