发布于 2012-06-05 21:13:40
15楼
[COLOR=blue]楼主仔细观察下L -10 到MD10和 L L# -10到MD10的区别,把结果用二进制表示,这样就能很容易看出负数是怎么表示的了。
你MOVE -10到MD10其实跟你MOVE -10到MW12是差不多的,因为-10是一个整形,而MD10是双整形(假如你未把MD10定义成DWORD),因此-10只能覆盖MD10的低字,即MW12,所以符号位只赋给了MW12,没有赋给MD10。
至于“Dword或者Dint怎么表示负数?”
DWORD是无符号数,是无法表示负数的,它的0~31这32个位都用来表示有效数值,因此它的表示范围0~4294967295,而DINT是有符号数,最高位(第31位)为符号位,它只有0~30这31个位是用来表示有效数值,因此它比DWORD少了一个最高位,其表示范围为-2147483648 ~ +2147483647。
另外,DWORD和DINT的表示示例如下:
L DW#16#FFFFFFFF
T MD10(把MD10定义为DWORD)
L L# -2147483648
T MD10(把MD10定义为DINT)
[/COLOR]