请高手指教,我看了S7-200跟我学视频第81集,IW0BCD2#1001_0001_0001_0000转为整数VW2009110,这看得懂。但是强制后,为什么程序块里IW0标为-28400,这是个什么数,怎么来的?请大侠们不吝赐教,谢谢!
最佳答案
这个问题,我现在搞明白了:数据的定义
整数(int)
整数数据类型长度为16位,数据格式为带符号十进制数,16位中最高为符号位。正整数是以原码格式进行存储的,如+786,对应的二进制码为2#0000_0011_0001_0010,而负整数则表示为正整数的二进制补码,即对应正整数的二进制码取反后加1,例如负整数-786,对应的二进制码为2#1111_1100_1110_1110。将负零(1000_0000_0000_0000)定义为-32768因此取值范围为-32768~32767。0表示正,1表示负。
这里2#1001_0001_0001_0000这个数据在PLC地存储是2进制的格式,第一位为符号位,那么这个数就是个负数,根据上面的定义,除符号位的其他位取反得到110-1110-1110-1111,取反后得到的这个二进制数的十进制值为28399,再根据定义加上1就得到了28400,因为符号位是1,所以是-28400
提问者对于答案的评价:
非常感谢您!我计算了就是这个答案。
专家置评
已阅,最佳答案正确。