一、数据类型COM
①COM-3:内部十进制数:十进制数两位用一个字节表示
每个字节放两个数字,但是最右边的字节内只放一个数字加符号字段。PIC定义中只能包含9,P,S,V.
m=n/2+1”的公式表示。
3.符号作为独立的半字节位于最右端的4位,无符号数字为F,有符号数(S型)为正数的场合,最右端四位为C,负数的场合为D。
4.数字项目在记录中属于组合项的场合,COBOL中组合项都是按照字符存储的,会进行变化
01 WK3 PIC S9(11) COMP-3. //实际占6位 ,11/2 + 1 =6
01 WK1 PIC 9(1) COMP-3.
01 WK2 PIC 9(1)V9(1) COMP-3.
01 WK3 PIC S9(1) COMP-3.
01 WK4 PIC S9(1)V9(1) COMP-3.
01 WK5 PIC S9(8) COMP-3.
01 WK6.
03 WK7 PIC 9(7) COMP-3.
03 WK8 PIC S9(7) COMP-3.
03 WK9 PIC 9(7) COMP-3.
MOVE -1 TO WK1.
MOVE 1.23 TO WK2.
MOVE -2 TO WK3.
MOVE -1.2 TO WK4.
MOVE -12345678 TO WK5.
MOVE -1234 TO WK7.
MOVE +1234567 TO WK8.
MOVE 3456789 TO WK9.
===========================
内存值 16进制值
WK1 1 1
F
WK2 1.2 02
1F
WK3 -2 2
D
WK4 -1.2 02
1D
WK5 -12345678 02468
1357D
WK6 对照码表对应字符 002413573579
013D246C468F
②COMP-5/BINARY (固有2進数)--同COMP-X
①COMP-5可存储的数值不限于PIC后定义的长度。
②COMP-5对于9和S9有区分,S9时,第一个bit是符号位,9型时没有符号位,所以可存储的数值的范围不一样。
③外部10进制,内部二进制表示。可表示的最大长度,取决与可表示的字节数。9型描述符的场合,根据有无符号,表示的字节数不同。X型描述符的场合,X的个数为对应的字节数。
赋值规则:
COMP型赋值:短赋长,先补位,转2进制存储
长赋短,先截位,转2进制存储
COMP型的负数:补位或截位后对对应正数的反码加1(正数为0,负数为1)
COMP-5型赋值:短赋长(正数),先转2进制存储,再补位
长赋短(正数),先转2进制存储,再截位
短赋长(负数),先将对应正数转2进制,再补位,再反码加1
长赋短(负数),先将对应正数转2进制,再反码加1,再截位
COMP-5对于9和S9的位数和存储的bytes的个数
COMP-5
数字9型个数
有符号 无符号 bytes
1-2 1-2 1
3-4 3-4 2
5-6 5-7 3
7-9 8-9 4
10-11 10-12 5
12-14 13-14 6
15-16 15-16 7
17-18 17-19 8
19-21 20-21 9
22-23 22-24 10
24-26 25-26 11
27-28 27-28 12
29-31 29-31 13
32-33 32-33 14
34-35 34-36 15
36-38 37-38 16
COMPUTATIONAL-5:
①定义的场合:可使用的描述符:S,9,V,X
(“x”的数目表示该数据项的字节数。)
②COMPUTATIONAL-5的定义描述符中包含"X"的场合,必须为无符号数。
③COMPUTATIONAL-5的定义描述符中包含"X"的场合,必须为无符号整数数。
④COMPUTATIONAL-5可全部使用X进行定义
官网说明:COMP-5型,PIC描述符使用 X或9。不存在使用混合X和9。代码也无混合使用的。
①COMPUTATIONAL-5描述符为S,V,9的场合,9的个数最多为38个,S和V不占位。
②COMPUTATIONAL-5描述符为X的场合,X的个数最多为16个。
9型举例
01 WK1 PIC 9(7) COMP-5.
01 WK2 PIC 9(7) COMP-5.
01 WK3 PIC 9(7) COMP-5.
01 WK4 PIC 9(7) COMP-5.
MOVE 16777215 TO WK1.
MOVE 16777216 TO WK2.
MOVE -98765432 TO WK3.
MOVE 98765432 TO WK4.
内存值 16进制值
WK1 16777215 FFF
FFF
WK2 00000000 000
000
WK3 01897864 1F8
C58
WK4 14879352 E07
3A8
WK1和WK2说明:
9型无符号整数赋值正数的场合,9的个数决定Byte个数,Byte的个数决定变量的取值范围。
PIC 9(7)对应的字节数为3,最大值为2^(3*8)-1=16777215。大于2^(3*8)-1=16777215,产生截取。
16777215:二进制:111111111111111111111111(24位)
16777216:二进制:1000000000000000000000000(25位)
WK3说明:
1.PIC 9(7)对应的字节数为3,最大值为2^(3*8)-1
最大值为16777215,共8位数字,共24位。
2.赋值为负数,并且绝对值大于最大值的场合。
负数使用对应正数的绝对值的反码+1表示。
先将-987654321的绝对正值转化为对应二进制,再转化位反码,反码再加1,
再转化为二进制,从右向左截取24位,进行储存。
十进制 16进制 2进制
01897864 1CF588 000111001111010110001000
98765432 E30A78 101111000110000101001111000(27位)
98765432补码 010000111001111010110000111
98765432补码 +1 010000111001111010110001000
000111001111010110001000(24位:01897864)
3.9型无符号
WK4说明:
1.PIC 9(7)对应的字节数为3,最大值为2^(3*8)-1
最大值为16777215,共8位数字,共24位。
2.赋值为正数,并且大于最大值的场合,
先将值98765432转化为对应的2进制,然后再从右向左截取24bit位,进行储存。
十进制 16进制 2进制
98765432 E30A78 111000110000101001111000(27位)
111000110000101001111000(截取24位) =14879352(10进制)
3.9型无符号,所有的bit均表示数值
S9型举例
01 WK5 PIC S9(7) COMP-5.
01 WK6 PIC S9(7) COMP-5.
01 WK7 PIC S9(7) COMP-5.
01 WK8 PIC S9(7) COMP-5.
MOVE 2147483647 TO WK5.
MOVE 2147483648 TO WK6.
MOVE 123456 TO WK7.
MOVE -123456 TO WK8.
内存值 16进制值
WK5 +2147483647 7FFF
FFFF
WK6 00000000 000
000
WK7 +0000123456 00E4
C120
WK8 -0000123456 FF1C
FED0
WK5和WK6的说明:
COMP-5型赋值场合,9的个数决定Byte个数,Byte的个数决定变量的取值范围,
最高一位为符号位,0表示正数,1表示负数。
PIC S9(7)对应的字节数为4,最大值为2^(4*8-1)-1=2147483647。
10进制 16进制 2进制
+2147483647 7FFFFFFF 01111111111111111111111111111111
-2147483648 8000000 10000000000000000000000000000000(最左端为1,为负数)
WK7说明:
1.PIC S9(7)对应的字节数为4,最大值为2^(4*8-1)-1
最大值为2147483647,共10位数字,共31bit位(最左端一位表示符号位)。
2.赋值为正数,并且绝对值小于最大值的场合,为原值。
先将值123456转化为对应的2进制,然后再左侧补0至31bit位。
十进制 16进制 2进制
123456 1E240 11110001001000000(17位)
00000000000000011110001001000000(32,左侧补0,最左侧为0,正数)
3.最左端一位为符号位,0表示正数,1表示负数。
WK8说明:
1.最大值为2147483647,共10位数字,共31bit位(最左端一位表示符号位)。
2.赋值为负数,并且绝对值小于最大值的场合,
负数使用对应正数的绝对值的反码+1表示。
先将值-123456的绝对正值转化为对应的2进制(32位),再转化为反码,反码再加1。
十进制 16进制 2进制
-0000123456 FFFE1DC0 11111111111111100001110111000000
123456 1E240 11110001001000000(17位)
00000000000000011110001001000000(32,左侧补0)
反码 11111111111111100001110110111111
反码+1 FFFE1DC0 11111111111111100001110111000000(32位,最左侧为1,负数)
3.最左端一位为符号位,0表示正数,1表示负数。
X型举例
01 WK9 PIC X(1) COMP-5.
01 WK10 PIC X(1) COMP-5.
01 WK11 PIC X(1) COMP-5.
01 WK12 PIC X(1) COMP-5.
01 WK13 PIC X(1) COMP-5.
MOVE 123 TO WK9.
MOVE -123 TO WK10.
MOVE 255 TO WK11.
MOVE 4321 TO WK12.
MOVE -4321 TO WK13.
内存值 16进制值
WK9 123 7
B
WK10 133 8
5
WK11 255 F
F
WK12 225 E
1
WK13 031 1
F
WK9说明:
1.PIC X(1) COM-5,无符号,X(1)对应的字节数为1,8bit位,最大值为2^(8)-1=255
2.赋值为正数,并且小于最大值的场合,为原值。
3.PIC X(1) COM-P:无符号数字,全部的Bit位均表示数值
WK10说明:
1.PIC X(1) COM-5,无符号,X(1)对应的字节数为1,8bit位,最大值为2^(8)-1=255
2.赋值为负数。
负数为绝对值的反码加1表示,无符号位。
10进制 16进制 2进制
123 7B 01111011
123反码 10000100
123反码 +1 10000101 = 133
3.如果在COMP-5数据项目用的PICTURE句中指定“x”,则该数据项目被视为无符号,不被赋予符号。
WK11说明:
PIC X(1) COM-5,无符号,X(1)对应的字节数为1,8bit位,最大值为2^(8)-1=255
WK12说明:
1.PIC X(1) COM-5,无符号,X(1)对应的字节数为1,8bit位,最大值为2^(8)-1=255
2.赋值为正数,并且大于最大值的场合。
先将4321转换为对应的2进制,再从右向左截取8位。
10进制 16进制 2进制
4321 10e1 1000011100001(13位)
11100001(8位) = 255
WK13说明:
1.PIC X(1) COM-5,无符号,X(1)对应的字节数为1,8bit位,最大值为2^(8)-1=255
可表示3位数字
2.赋值为负数,并且绝对值大于最大值的场合。
负数为绝对值的反码加1表示,无符号位。
先将转换为负数的绝对值的二进制码,再转换相应的反码,再加1,再从右向左截取8位
10进制 16进制 2进制
4321 10e1 1000011100001(13位)
11100001(8位) = 255
4321反码 0111100011110
4321反码 +1 0111100011111 = 133
再从左向右截取8位 00011111 = 31
二、编码
EBCDIC编码中:符号位,无符号数字为F,有符号数(S型)为正数的场合为C,负数的场合为D。
Shift-JIS编码中:符号位在最后1byte的上4bit,3代表正数,7代表负数。(指定SIGN时符号占位)
JISコード表
ASCIIコード表
EBCDICコード表
COBOL语言总结(一):COBOL语言总结(一)
后续补充..