无符号十进制WORD和有符号十进制数INT区别

字(WORD)数据格式包括无符号十进制,范围B#(0,0)~B#(255,255),16位。
整数(INT)数据格式为有符号十进制数,范围-32763~+32767,16位。
请问:1.这两种数据格式只是十进制数的正负号区别吗? 
      2.为什么一种用字节B#表示,一种用纯数字十进制表示?
      3.B#(255,255),这种表示方法是什么意思?

问题补充:
谢谢几位老师的解答,我还有一点疑问,字(WORD)数据格式包括BCD码。
  书上介绍说BCD码表示的十进制数是为了和人打交道方便,而且可以提高人的工作效率。二进制转ASCII码、转十进制整数(INT)、转BCD码,都是计算机内部直接转换,个人认为内部转换和人的工作效率没有关系。而且同样一个二进数数用ASCII码和BCD码表示的数值还不一样,容易让人误解。我的问题是:
   1.既然制定了ASCII码、十进制整数(INT)显示十进制数,BCD码显示不了优势,为什么还要制定BCD码?
   2.计算机内部二进制转十进制整数要用BCD码过渡转换吗?

最佳答案

为了回答你的问题,先来了解一下机器编码代表的含义。
例如,如下存储空间存储如下数据
MW0=W#16#8001,.对于赋值,梯形图用MOVE指令,用STL指令表,则采用T装载和L传送指令共同实现。则其中MB0=B#16#80,MB1=B#16#0
   所以,上面“峰转花明”的理解是错误的。

因数据类型的定义规范的存在,MW0被机器理解成的变量类型不一样,则所代表的数字大小不一样
若定义为word类型,则MW0=W#16#8001=32769,无关符号。
若定义为int类型,则   MW0=W#16#8001=-32767,为负数

MW0被机器识别为何种数据类型,则要看MW0参与了何种运算。例如参与比较、转换、整数运算、整数右移,则会被机器理解会int型数据,若参与字逻辑、字移位,会被机器理解为word。
例如MW0=W#16#8001用move指令直接赋值给MD2,这里不涉及类型识别,则MD2=DW#16#00008001,则无论后续参与何种运算怎么样理解,MD2=+32769,若使用I_DI指令,将MW0赋值给MD2,则MD=DW#16#FFFF8001,该指令将MW0自动识别为int型数据。

对于你的问题
1.这两种数据格式只是十进制数的正负号区别吗? 
对于word类型常数,赋值给变量,可以有多种表示方式。B#(*,*)只是其中一种。B(*,*)表示按字节描述,其中*数据,按十进制书写,不能是二进制、也不是16进制。例如B#(F8,01)就是错误的写法。
2.为什么一种用字节B#表示,一种用纯数字十进制表示?
这是规定,便于机器识别。当机器见到B#(*,*)则认为这是按字节以十进制书写的数值,程序可以自动转换为16进制书写的数据。对于以纯数字书写的数据,则自动识别为真正意义上的数,例如12,就是int数据,12.0就会理解为浮点数。
3.B#(255,255),这种表示方法是什么意思?
B#(255,255)=W#16#FFFF,也就是B#(255,255)只是一种书写方式的不同而已。

提问者对于答案的评价:
我把最高分给你,但还有一个问题没有回答啊。能追加答案吗?我在线等。

专家置评

已阅,最佳答案正确。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc236864.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日 下午4:03
下一篇 2018年12月1日 下午4:03

相关推荐