quote:以下是引用Automann在2012-12-04 11:27:31的发言:quote:以下是引用VOLLMER在2012-12-04 09:38:36的发言:
好热的帖子,我也来掺和几句,说说我的理解。
1、word是数据类型,但不是数值类型,而是16位长度的位串。和byte、time date tod dt以及string一样,可以没有数值的内涵的,所以取值范围也用0-16#ffff表示,而不是 -32768-32767。
2、前段时间用LAD写ob86时,需要做判断,很周折。但一想,进入事件、离开事件、地址代号只是个代码而已,不是数值,无法做数值比较,也就释然了。
3、若是用STL写那段程序,可以直接比较。但==I 毕竟是数值比较指令,这样做实际上是把word当做int使用,虽然达到了比较的目的,但这一步是没有物理意义的。
4、stl scl可以直接做word类型的运算比较,可编译通过,不知道有何作用。我一直觉得word做数值运算很凶险,因为工具不对,很可能造成不可预期的后果,却不能利用编译器排查。
5、自己写子程序的话,表示数值的用肯定用int类型。至于lib中的数值用word状况,我现在把它理解成不够完美。(或许以后才能正确理解,piw是数值吗?iw0是数值吗?ib0比ib1大,有什么意义?嘿嘿)。怎么办?要么不用、要么妥协,多用一次转换呗。再者用绝对地址也是一种妥协吧?
1. word是数据类型,当然也是“数值类型”,难道0-16#ffff不是“数值的内涵”吗?
白马也是马,无符号数也是数。
2. “进入事件、离开事件、地址代号只是个代码而已,不是数值”?代码也是数值。
“无法做数值比较”吗?用STL可以比较,用LAD的符号地址将它传送到绝对地址,剥掉数据类型的外衣,也能比较。
3、“虽然达到了比较的目的,但这一步是没有物理意义的”,OB86的局部变量就包含了物理意义,比较得出的结论怎么会没有物理意义?
4、“stl scl可以直接做word类型的运算比较,可编译通过”,WORD数据类型的数装入累加器,累加器相当于一个绝对地址的存储单元,数据类型的属性消失,CPU把它当作INT类型来比较。
5. “至于lib中的数值用word状况,我现在把它理解成不够完美”?我认为是否完美,主要看编程是否方便。也就是少让万版主感觉吃了**。
1、加引号的“数值类型”是什么意思?我从未在任何手册的数值类型列表中见到word
2、我还是认为对word进行大小比较没有意义。判断相等只是特例,是每个bit都相同而已。还是中断源,事件16#38和16#39的大小有意义吗? 38斤比39斤轻才有意义