COBOL中COMP变量括号内数字的含义及字节对应疑问
COBOL PIC COMP 格式疑问解答
括号里的数字(4/9)代表什么?
括号里的数字是该变量能存储的十进制有效数字的最大位数,S表示这是带符号的数值类型:
PIC S9(4) COMP:最多可存储4位十进制有符号数,范围覆盖-9999到+9999PIC S9(9) COMP:最多可存储9位十进制有符号数,范围覆盖-999999999到+999999999
为什么4对应2字节,4字节对应的数字是9而非8?
这是因为COBOL的COMP(二进制存储)类型是按十进制数的存储需求匹配最小二进制字节规格,而非直接按二进制位数生硬转换十进制位数:
- 2字节(16位)有符号二进制的取值范围是
-32768到32767,这个范围完全能覆盖4位十进制数的最大范围,所以用2字节对应S9(4) - 4字节(32位)有符号二进制的取值范围是
-2147483648到2147483647,这个范围能容纳的最大十进制位数是9位(999999999小于2147483647),8位十进制的最大值99999999远小于这个范围,为了最大化利用存储空间,就用S9(9)对应4字节,而非8位。
内容的提问来源于stack exchange,提问作者stumpgrump
相关产品推荐
相关产品推荐

