quote:以下是引用Zane在2013-02-26 00:35:42的发言:
其实这个问题有点蹊跷,大家有没有觉得?
当然,廖老师的解答可以用来解释这个问题,但我依旧觉得有问题是楼主如何从MW166里读到34123这个值的?
如果是在程序块的在线监测,在线显示的值应该是该指令执行时累加器的值,从上述结果来看,MW166里的数显然已经是被系统认作一个负数了,那显示的也应该是个负数才对啊。
所以,我猜测楼主读到的是个16进制的读数,在用计算机转换后直接报了来,如果直接转成整数显示,就不会再有这个问题了,所以仔细想来觉得还不是WORD和INT的问题,而是楼主无意之间给大家吃的药。
结论是,无论你如何定义数据WORD也好,INT也好,运算指令如果是处理带符号数的,那就认为寄存器的数就是有符号数,所以要做大于32767的算术运算,变量长度必须是4个字节
程序状态监控时显示的“表达式”选“自动”,MW166中是负数, “表达式”选“十进制” 显示的就是34123:

楼主有点不厚道,大家在为他脑筋急转弯,他却不陪我们玩了。