COBOL语言总结(二)-COMP

目录

一、数据类型

1、数值类型COM

①、COMP/BINARY:二进制数

②、COM-1:是用来定义单精度浮点数的

③、COMP-2:是用来定义双精度浮点数的

1、主机是以纯小数并且十分位不为0的形式存储数据的

2、剖析一个内存数据,比如:C211570A

3、怎么从一个十六进制数据快速反推出我们想要的十进制

④、COM-3:内部十进制数:十进制数两位用一个字节表示

⑤、COMP-5/BINARY (固有2進数)--同COMP-X

2、赋值规则:

 COMP-5对于9和S9的位数和存储的bytes的个数

9型举例

S9型举例

X型举例

二、编码


一、数据类型

1、数值类型COM

①、COMP/BINARY:二进制数

只能存储数字,PIC定义中只能包含9,P,S,V。

数字以二进制形式存储。负数是以绝对值的2进制补码形式表示。

PIC定义长度占有字节
1~42字节
5~94字节
10~188字节

②、COM-1:是用来定义单精度浮点数的

原文链接:https://blog.csdn.net/hlasm/article/details/42003483

COMP-1是用来定义单精度浮点数的,占四个字节(对应于HLASM/mainframe assembler里的E定义)

它以内部的指数形式(二进制的指数形式)来表示一个数,以固定长度的内存单元来存放一个数。

    如:以4个字节表示一个数,其中8位表示指数部分,24位表示数字部分。这称为短浮点形式。

③、COMP-2:是用来定义双精度浮点数的

COMP-2是用来定义双精度浮点数的,占八个字节(对应于HLASM/mainframe assembler里的D定义)

也可以用8个字节(64位)来表示一个数,指数部分仍为8位,数字部分为56位,称为长浮点形式。

长浮点形式比短浮点形式有更高的精确度(内部浮点形式的数值在内存中所占字节长度只有4字节和8字节两种),而且无论是短浮点还是长浮点,数值范围均为:5.4X10^-79   ~   0.72X10^76

具体内部存储见下图:

解析如下:

第0位(最左边的bit位为第0位,以此类推)是符号位,0为正,1为负。
第1~7位是指数位,初始值为X'40',如果小数点左移1位,则初始值加1,为X'41';如果右移1位,则减1,为X'3F'。
第8~31/8~63位是尾数位,也可以说是组合位(8~31是针对COMP-1,8~63针对COMP-2)。

1、主机是以纯小数并且十分位不为0的形式存储数据的
1.主机是以纯小数并且十分位不为0的形式存储数据的

 地址  内存数据               常量名      常量数值

000064 427B74BC            14 A     DC   E'123.456' 
000068 427B0000            15 B     DC   E'123'    
00006C 4074BC6A            16 C     DC   E'.456'    
000070 C27B74BC            17 X     DC   E'-123.456' 
000074 00000000                           
000078 427B74BC6A7EF9DB    18 Y     DC   D'123.456'  

A,B和C我们都定义成常量,并且可以把A看成是B + C之和
 B: 123 = X'7B'按照要求应该变为0.7B * 16^2,由于指数为+2,所以指数的bit位就变成了X'40'+X'2'=X'42',即内存为427B0000
 C: 0.456=X'0.74BC6A7EF9DB'=0.74BC6A7EF9DB * 16^0,其本身已经符合要求了,所以内存为4074BC6A(由于C最多四个字节,后面的存储不了自动舍弃,这和我们常说的小说点后精确到多少位含义是一样)

计算机在进行加减之前,首先要保证指数一致,然后再保证小数点对齐。要理解这个,我们可以参考下十进制,比如100*10^1+ 0.008*10^2,一般的算法为:100*10^1+ 0.008*10^2 = 1000 + 0.8 = 1000.8

其实这里隐含的约束也是先把指数变成一样,然后小数点对齐(只是这里指数部分为10^0)。 

其实计算机也是这么做的:
 1.先把前两位(指数位)变成相同:4074BC6A -> 41074BC6 -> 420074BC
 2.然后再进行C+B=A的计算:420074BC+ 427B0000 = 427B74BC

再来看下X和Y,X是A的相反数,Y和A只是精度不同
X是负数,所以其内存第一个bit位是1。
Y被定义成双精度浮点数类型(COMP-2),可以看出A和Y的内存数据仅仅是精度不同而已。

2、剖析一个内存数据,比如:C211570A

1.由于第一个bit是1,所以它是个负数,
2.由于指数位是X'42',即后面三个字节中的11为整数部分,570A为小数部分
3.整数部分11变成十进制为17
4.小数部分0.570A变成十进制为0.339996337890625,约等于0.34

5.即这个数字为-17.34

3、怎么从一个十六进制数据快速反推出我们想要的十进制
1)快速反推(由十六进制推算出十进制):
C211570A =(-X'11570A'/16^6)*16^2 
         = -X'11570A'/16^4 
         = -1136394/65536 
         = -17.34

C411570A = (-X'11570A'/16^6)* 16^4 
         = -X'11570A'/16^2 
         = -1136394/256
         = -4439.039

2)快速正推(由十进制推算出十六进制):

17.34 = 0.1734 * 10^2
      = 1734/10^2
      = X'6C6'/ X'64'
      = (X'6C60000'/ X'64')*(1/X'10000')
      = 11570A*(1/ X'10000')

这里为什么先让被除数乘X'10000',是因为笔记本自带的计算机在进行16进制除法的时候,只显示整数部分.实际上,计算机也是没法表示16进制的小数部分的,因为我们平时说的小数点,都是针对十进制的,又有谁见过16进制的小数点长什么样子?

所以记入内存时再缩小X'10000'倍即可:X'4211570A'(如果不缩小应该是X'4611570A')

以上方法的总体思想都是把除数和被除数都变成整数,然后再进行运算。

④、COM-3:内部十进制数:十进制数两位用一个字节表示

        1.数据在计算机中以压缩十进制数的形式存储。每个字节放两个数字,但是最右边的字节内只放一个数字加符号字段。PIC定义中只能包含9,P,S,V.

        2.项目的位数(n)和项目所占字节数(m)之间的关系用“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的个数为对应的字节数。

2、赋值规则:

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 (Extended Binary Coded Decimal Interchange Code) 为国际商用机器公司(IBM)于1963年-64年间推出的字符编码表,根据早期打孔机式的二进制编码的十进制数(BCD, Binary Coded Decimal)排列而成。

EBCDIC编码中:符号位,无符号数字为F,有符号数(S型)为正数的场合为C负数的场合为D

Shift-JIS编码中:符号位在最后1byte的上4bit,3代表正数7代表负数。(指定SIGN时符号占位)

EBCDIC缺点是:英文字母不是连续地排列,中间出现多次断续,为撰写程序的人带来了一些困难。

0x81 to 0x89 represent characters ‘a’ to ‘i’
0x91 to 0x99 represent characters ‘j’ to ‘r’
0xA2 to 0xA9 represent characters ‘s’ to ‘z’
0xC1 to 0xC9 represent characters ‘A’ to ‘I’
0xD1 to 0xD9 represent characters ‘J’ to ‘R’
0xE2 to 0xE9 represent characters ‘S’ to ‘Z’

EBCDIC

ASCII<===>EBCDIC

DecHexASCIIEBCDIC
000NULNullNULNull
101SOHStart of Heading (CC)SOHStart of Heading
202STXStart of Text (CC)STXStart of Text
303ETXEnd of Text (CC)ETXEnd of Text
404EOTEnd of Transmission (CC)PFPunch Off
505ENQEnquiry (CC)HTHorizontal Tab
606ACKAcknowledge (CC)LCLower Case
707BELBellDELDelete
808BSBackspace (FE)
909HTHorizontal Tabulation (FE)
100ALFLine Feed (FE)SMMStart of Manual Message
110BVTVertical Tabulation (FE)VTVertical Tab
120CFFForm Feed (FE)FFForm Feed
130DCRCarriage Return (FE)CRCarriage Return
140ESOShift OutSOShift Out
150FSIShift InSIShift In
1610DLEData Link Escape (CC)DLEData Link Escape
1711DC1Device Control 1DC1Device Control 1
1812DC2Device Control 2DC2Device Control 2
1913DC3Device Control 3TMTape Mark
2014DC4Device Control 4RESRestore
2115NAKNegative Acknowledge (CC)NLNew Line
2216SYNSynchronous Idle (CC)BSBackspace
2317ETBEnd of Transmission Block (CC)ILIdle
2418CANCancelCANCancel
2519EMEnd of MediumEMEnd of Medium
261ASUBSubstituteCCCursor Control
271BESCEscapeCU1Customer Use 1
281CFSFile Separator (IS)IFSInterchange File Separator
291DGSGroup Separator (IS)IGSInterchange Group Separator
301ERSRecord Separator (IS)IRSInterchange Record Separator
311FUSUnit Separator (IS)IUSInterchange Unit Separator
3220SPSpaceDSDigit Select
3321!Exclamation PointSOSStart of Significance
3422"Quotation MarkFSField Separator
3523#Number Sign, Octothorpe, "pound"
3624$Dollar SignBYPBypass
3725%PercentLFLine Feed
3826&AmpersandETBEnd of Transmission Block
3927'Apostrophe, PrimeESCEscape
4028(Left Parenthesis
4129)Right Parenthesis
422A*Asterisk, "star"SMSet Mode
432B+Plus SignCU2Customer Use 2
442C,Comma
452D-Hyphen, Minus SignENQEnquiry
462E.Period, Decimal Point, "dot"ACKAcknowledge
472F/Slash, VirguleBELBell
483000
493111
503222SYNSynchronous Idle
513333
523444PNPunch On
533555RSReader Stop
543666UCUpper Case
553777EOTEnd of Transmission
563888
573999
583A:Colon
593B;SemicolonCU3Customer Use 3
603C<Less-than SignDC4Device Control 4
613D=Equal SignNAKNegative Acknowledge
623E>Greater-than Sign
633F?Question MarkSUBSubstitute
6440@At SignSPSpace
6541AA
6642BB
6743CC
6844DD
6945EE
7046FF
7147GG
7248HH
7349II
744AJJ¢Cent Sign
754BKK.Period, Decimal Point, "dot"
764CLL<Less-than Sign
774DMM(Left Parenthesis
784ENN+Plus Sign
794FOO|Logical OR
8050PP&Ampersand
8151QQ
8252RR
8353SS
8454TT
8555UU
8656VV
8757WW
8858XX
8959YY
905AZZ!Exclamation Point
915B[Opening Bracket$Dollar Sign
925C\Reverse Slant*Asterisk, "star"
935D]Closing Bracket)Right Parenthesis
945E^Circumflex, Caret;Semicolon
955F_Underline, Underscore¬Logical NOT
9660`Grave Accent-Hyphen, Minus Sign
9761aa/Slash, Virgule
9862bb
9963cc
10064dd
10165ee
10266ff
10367gg
10468hh
10569ii
1066Ajj
1076Bkk,Comma
1086Cll%Percent
1096Dmm_Underline, Underscore
1106Enn>Greater-than Sign
1116Foo?Question Mark
11270pp
11371qq
11472rr
11573ss
11674tt
11775uu
11876vv
11977ww
12078xx
12179yy
1227Azz:Colon
1237B{Opening Brace#Number Sign, Octothorp, "pound"
1247C|Vertical Line@At Sign
1257D}Closing Brace'Apostrophe, Prime
1267E~Tilde=Equal Sign
1277FDELDelete"Quotation Mark
12880Reserved
12981Reservedaa
13082Reservedbb
13183Reservedcc
13284INDIndex (FE)dd
13385NELNext Line (FE)ee
13486SSAStart of Selected Areaff
13587ESAEnd of Selected Areagg
13688HTSHorizontal Tabulation Set (FE)hh
13789HTJHorizontal Tabulation with Justification (FE)ii
1388AVTSVertical Tabulation Set (FE)
1398BPLDPartial Line Down (FE)
1408CPLUPartial Line Up (FE)
1418DRIReverse Index (FE)
1428ESS2Single Shift Two (1)
1438FSS3Single Shift Three (1)
14490DCSDevice Control String (2)
14591PU1Private Use Onejj
14692PU2Private Use Twokk
14793STSSet Transmit Statell
14894CCHCancel Charactermm
14995MWMessage Waitingnn
15096SPAStart of Protected Areaoo
15197EPAEnd of Protected Areapp
15298Reservedqq
15399Reservedrr
1549AReserved
1559BCSIControl Sequence Introducer (1)
1569CSTString Terminator (2)
1579DOSCOperating System Command (2)
1589EPMPrivacy Message (2)
1599FAPCApplication Program Command (2)
160A0
161A1
162A2ss
163A3tt
164A4uu
165A5vv
166A6ww
167A7xx
168A8yy
169A9zz
170AA
171AB
172AC
173AD
174AE
175AF
176B0
177B1
178B2
179B3
180B4
181B5
182B6
183B7
184B8
185B9`Grave Accent
186BA
187BB
188BC
189BD
190BE
191BF
192C0
193C1AA
194C2BB
195C3CC
196C4DD
197C5EE
198C6FF
199C7GG
200C8HH
201C9II
202CA
203CB
204CC
205CD
206CE
207CF
208D0
209D1JJ
210D2KK
211D3LL
212D4MM
213D5NN
214D6OO
215D7PP
216D8QQ
217D9RR
218DA
219DB
220DC
221DD
222DE
223DF
224E0
225E1
226E2SS
227E3TT
228E4UU
229E5VV
230E6WW
231E7XX
232E8YY
233E9ZZ
234EA
235EB
236EC
237ED
238EE
239EF
240F000
241F111
242F222
243F333
244F444
245F555
246F666
247F777
248F888
249F999
250FA
251FB
252FC
253FD
254FE
255FF

计算机编码与解码&编码表

COBOL语言总结(一)

COBOL语言总结(三)--JCL扩展

干我们这行,啥时候懈怠,就意味着长进的停止,长进的停止就意味着被淘汰,只能往前冲,直到凤凰涅槃的一天!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杀神lwz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值