一、数据类型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语言总结(一)

后续补充..