
OS390上的COBOL,定义变量A PIC 9(4) COMP,那A的最大值是9999还是65535? 5
因为二进制在主机内存中是16进制直接存放的,十进制的65535对应16进制刚好是FFFF,本人最近发现在不同程序里面有的时候最大值可以是65535,但是有的时候只能是99...
因为二进制在主机内存中是16进制直接存放的,十进制的65535对应16进制刚好是FFFF,本人最近发现在不同程序里面有的时候最大值可以是65535,但是有的时候只能是9999,是什么情况?真心搞不懂,这方面的书也太少了,关键实践的时候还不一致,本人是比较倾向65535的,求解答,谢谢!!!
展开
展开全部
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
不知这样你能否理解
那么,为什么可以最大值是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参数有关系
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最大值怎么可能是9999 = =|
uint16 的范围是0~65535 也就是0x0-0xFFFF
int16 的范围是-32768~32767
uchar 的范围是0~255 (0x0-0xFF)
char 范围是-128~127
貌似没有哪一种定义的最大值是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的编程者都不知道吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询