永发信息网

OS390上的COBOL,定义变量A PIC 9(4) COMP,那A的最大值是9999还是65535?

答案:2  悬赏:20  手机版
解决时间 2021-11-19 11:23
  • 提问者网友:蔚蓝的太阳
  • 2021-11-18 14:37
OS390上的COBOL,定义变量A PIC 9(4) COMP,那A的最大值是9999还是65535?
最佳答案
  • 五星知识达人网友:杯酒困英雄
  • 2021-11-18 16:08
A的最大值肯定是9999,因为你定义4位数字长度。 COMP只是代表存储的方式是二进制存放。所以A=9999的时候,存储器中表现为0010 0111 0000 1111。
那么,为什么可以最大值是65535呢? 比如,你MOVE 65535 TO A, 结果如何?
结果是5535, 9型是右对齐,所以最后的6就放入上一个定义变量中去了:
举例来说: 01 A PIC 9(4) COMP
01 B PIC 9(4) COMP
MOVE 0 TO A
MOVE 65535 TO B
结果: B = 5535 存储器中 0001 0101 1001 1111
A = 6 存储器中 0000 0000 0000 0110
当然,这是因为9(1) ~ 9(4) COMP都占用2个bit关系。
你如果定义成9(5) ,如果B=5535, 存储器中 0000 0000 0000 0000 0001 0101 1001 1111
不知这样你能否理解追问按照你这样说如果程序中有溢出的数据那不是造成其他定义的数据都乱了?出现这种原因好像是跟编译时使用的PARM参数有关系
全部回答
  • 1楼网友:罪歌
  • 2021-11-18 17:27
最大值怎么可能是9999 = =|

uint16 的范围是0~65535 也就是0x0-0xFFFF
int16 的范围是-32768~32767
uchar 的范围是0~255 (0x0-0xFF)
char 范围是-128~127

貌似没有哪一种定义的最大值是9999吧...追问谢谢你的回答,最大值是9999肯定有啦,看你定义变量的类型。我是这样的:如果把一个超过4位的整数(大于9999但不超过65535)赋给上面定义的变量A,高位会被截断的,但之前我也试过了,定义二进制9(4)最大值确实可以是65535,我是这点觉得很奇怪。估计很多用COBOL的编程者都不知道吧
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯