【计算机组成原理】2.1.3 定点数的编码表示

2.1.3 定点数的编码表示

*文章整理自王道公开课程《王道计算机考研 计算机组成原理》,文中时间节点与本节课程视频相对应。
课程重点详细勾画请WX搜索GZH:玄默冲虚
欢迎关注!

00:00

好的,这个小节我们要学习的是定点数的表示。我们首先来认识一下什么叫定点数。与定点数相对应的另一个概念叫做浮点数。所谓定点数就是指小数点的位置固定不变,而浮点数是小数点的位置是不固定的,会浮动。用大家熟悉的十进制数来类比的话,所谓定点数就是我们平时更习惯使用的这种常规的计数方式。我们会显示的标明小数点的位置,而浮点数就是我们用科学计数法表示的这种数。虽然我们把小数点的位置标注在了这个地方,但是如果在乘上我们给出的这个阶码,那么我们的这小数点其实是会往后移的那这是我们熟悉的十进制,其实对于二进制也是类似的,二进制的数据表示也分为定点数和浮点数。

00:56

虽然都是0101组成的,但是我们终归需要确定这个小数点的一个位置。如果我们规定小数点的位置固定不变,这就是定点数。如果我们还需要加上一个类似于科学计数法的这种解码,那么这种数就是浮点数。王道书里2.2这个部分讲的是定点数在计算机里面怎么进行加减乘除这些运算。然后2.3这个部分我们会学习浮点数的表示和运算。

01:25

这个小节我们先学习定点数怎么表示,分为无符号数和有符号数。其中有符号数可以用原码、反码、补码、移码这样的4种方式来表示。这个小节是很重要的基础,同时也是考试的重点。我们需要重点关注这几种码之间的相互转换问题。

01:45

好,首先我们先看一下比较简单的无符号数。所谓无符号数就是指整个机器字长的全部二进制位,都是用来表示数值,并没有正负这样的符号之分,相当于我们使用所有的二进制位来表示数的绝对值。比如像这个二进制数,它所对应的十进制就应该是156。那具体怎么转换?这个是我们在之前的小节中已经重点强调过的内容,就是用每一位二进制数乘以这一位的位权,然后所有的位进行一个相乘相加就可以。

02:22

我们需要重点探讨一个问题,就是无符号数的表示范围是多大?既然要聊它的表示范围,我们自然需要确定一个前提条件,就是我们到底用多少个比特位来表示一个无符号数,位数越多显然表示的范围越大。比如我们使用八位二进制来表示一个无符号数,那么八位二进制总共可以有二的8次方种状态,分别是全零到全一,那所有的二进制位都为一,这个二进制数所对应的真值应该是多少呢?可以用很多种思路来确定这二进制数所对应的增值。首先最土的办法,我们是不是可以把每一位位和位位相相乘相加,那八个二进制位就相当于是二的7次方加2的6次方加一直加到2的0次方。那这是一个简单的等比数列求和问题,得到的结果应该是二的8次方减1,那2的8次方减一应该是等于255。所以八倍二进制数它表示的范围数值范围就应该是0到255这样的一个范围。这是用每一位乘以自己的位权相乘相加这样的方式算出来的一个值。

03:39

我们再介绍一种思路来算八个一所表示的值。现在我们给这八个一再加上一个一,那么末位一加一等于零向高位进一,一加一又等于0,再向高位进一,那所有的这些都是等于零进一,最后我们会往更高位再进一个一。那更高的这个位它的权值应该是二的8次方。因为它是第九个二进制位,所以如果我们在原先这个值的基础上加一等于二的8次方,那么原本的这个值不就是二的8次方减一吗?所以我们也可以用这样的思路来确定八个一它所表示的一个值。如果把刚才这种思路再进行一个推广的话,N位的无符号数它能表示的范围显然就应该是0 ~ 2N - 1。所以这是N位无符号数的一个表示范围。

04:37

所有的二进制位都是用来表示数值而没有符号位,所以称为无符号数。一般来说,当我们谈到无符号数的时候,我们通常只会讨论无符号的整数,而没有无符号的小数。这一点大家应该是有感受的。比如大家学习C语言的时候,它有一个关键字叫unsigned。这个关键字你只能用来修饰unsigned int或者long这些整数相关的关键字,大家可以去试一下。如果用unsigned去修饰float,修饰这种浮点数的话,那它的编译器是会报错的。所以当我们在谈到这种无符号数的时候,通常我们只会探讨整数,无符号的整数,而不会探讨小数。好,这是无符号数。

05:26

好,接下来我们来探讨有符号数的定点表示。对于有符号数来说,我们既需要考虑到整数如何表示,也需要考虑到小数如何表示。如果要表示整数的话,我们通常会规定小数点是固定的,隐含在最低位的后面。然后最高位的这个二进制位表示的是符号位,通常零表示的是正,然后一表示的是负。另外如果我们要用定点的方式表示小数的话,我们通常会规定最高位为符号位,小数点隐含在这个符号位的后面。因此如果我们用这种定点的方式来表示一个比如说是19.75这样的数的话,那我们需要把整数部分单独的保存,然后把小数部分单独的保存。我们可以用原码、反码、补码这样的3种方式来表示定点的整数或者小数。另外还可以用移码来表示定点的整数,这个我们一会儿会展开。

06:30

在之后的讲解中,如果我们把真值记为X的话,那我们会用这种X加一个中括号,然后右下角标注原反补一这样的方式来表示X所对应的原码、反码、补码和移码。对了,这个地方还有一个概念叫做尾数,就是指我们用来表示整数或者小数的数值部分的这些个二进制位,我们就把它称为尾数,然后最高位我们把它称为符号位。好,接下来我们先来看最简单的原码。所谓原码就是指我们会用尾数来表示真值的一个绝对值。其实就是之前我们一直在探讨的,大家比较熟悉的那种二进制数表示方法。

07:16

我们假设机器字长是八位,也就是说我们有一位用来表示符号,然后剩下的七位用来表示数值,也就是尾数。好,首先来看一下定点整数用原码怎么来表示。每一个定点整数占八个比特位,最高位是符号,然后后续每一个位的权值在这已经标出来了。如果说我们要用原码的方式表示正的19的话,首先符号位正号应该是对应0。然后后续的这七个尾数,我们需要表示成这个真值的绝对值,也就是19 19应该是等于16加2再加1。所以19所对应的二进制就应该是一加2再加16,16应该是二的4次方。好,所以19的尾数就应该是0011。

08:11

那如果我们要表示的是-19的话,是不是只需要把符号位从零变为一就可以了?好,所以这就是19和-19的1个原码表示。注意我们的定点整数小数点是默认隐含在了最后面这个位置,所以我们才可以确定这一位的位全是二的0次方,再往上一位是二的1次方。如果说我们规定小数点隐含在这个位置,那是不是意味着小数点左边这一位的权值是二的0次方,再往上是二的一次、二的二次、二的三次。而小数点往右的这几位权值就会变成二的-12的-22的-3,变成这样的一个情况。好,所以我们这儿确定各个位的权值,其实是基于我们小数点的这个隐含位置来进行判断的。

09:03

好,这是用原码表示的定点整数,很简单,就是我们熟悉的那种表述方式。只不过如果题目规定了我们的这个定点整数需要占多少位,那么我们需要把高位的这些部分补上0。好,接下来看定点小数的一个原码表示。由于我们的小数点是隐含在了符号位的后面,所以小数点右边这位权值应该是二的负一,往后是二的-2、-3,一直到2的-7。也就是第一位是0.5,第二位是0.25,第三位是0.125。好,后续的就不再展开。

09:44

好,那正的0.75怎么表示呢?0.75应该刚好是等于0.5加上0.25,所以尾数部分肯定是两个一,然后后续全部是零。那正的0.75我们只需要让符号位为零就可以,而负的0.75我们把符号位从零改成一,然后尾数依然是不变的。所以这就是定点小数的一个原码表示。

10:11

同样的如果题目告诉我们机器字长的位数,或者指明了原码需要占多少位,那么我们有可能需要在后面补一些零凑足规定的位数。在课本和题目里面,大家也经常会见到这样的一种书写的方式。就有的地方可能会在符号位后面打一个小小的逗号,但是这个逗号其实是不存在的,是我们脑补上去的。这么写只不过是为了让大家更好的区分符号位,还有尾数这样的两个部分。

10:39

另外如果没有明确的指明机器字长是多少,原码需要占多少位,那么像刚才-19这个数,我们也可以写成一。然后后面跟这样的一串,也就是把刚才我们补上的两个零给去掉。类似的在书上表示定点小数的时候,也可以写成这样的一种形式,这个地方是一个小点点而不是逗号。这个小数点前面这一位是符号而不是数值。所以这个数我们不能把它理解为是1.11,而应该把它理解为是负的0.11。好,这是大家看书做题的时候有可能会遇到的一种写法。

11:19

好,接下来我们要关注的是原码的一个表示范围。先探讨原码表示定点整数的一个表示范围。总共有N加一位,其中尾数有N个位。那么N位的尾数可以表示的绝对值的范围应该是0到2的N次方减1,应该是这样的一个范围。这个结论刚才我们在无符号数那个地方探讨过。好,尾数可以表示这样的一个范围。那我们再加上符号位的话,最小的我们可以表示的整数就应该是负的2N次方减1,而正的可以表示的最大整数就应该是二的N次方减一。好,这个应该很好理解。

12:05

唯一一点需要注意的是用原码表示定点整数。我们在表示真值0的时候,可以有正零和负零这样的两种形式。正零就是符号位为零,然后后续的尾数也全部是零,而负零就是符号位为一,后续的尾数全部是零。因此虽然N加一个二进制位可以表示出2的N加1次方这么多种不同的状态。理论上我们也可以表示出这么多个数,但实际上你数一下,在这个范围内其实只包含了2的N次方加1,然后再减一这么多个数。原因就是其中的两个二进制状态对应了同一个真值。好,这一点大家需要注意。

12:51

那接下来我们再来看用原码表示定点小数的一个表示的范围,总共N加一个位,其中一个位表示符号,右边的N位表示实际的数值。那么这N个二进制位所能表示的一个绝对值的范围应该是最小是零,就是所有都是零。然后最大的话就是所有都是一,所有的位都是一,那么它所对应的值就应该是二的负1次方加上二的负2次方,一直加加到2的负N次方。因为我们总共有N位,那么这个值加出来就应该是等于一减2的负N次方。因此当我们规定小数点的位置在这个地方的时候,这N个尾数所能表示的范围,绝对值的范围就应该是0到1减2的负N次方。好,如果再加上符号位正负的话,那它所能表示的最小值就应该是这样的一个值,最大值就应该是一减2的负N次方是小数。

13:53

另外和之前一样,我们在表示真值零的时候,同样也可以有正零和负零这样的两种形式。好,这就是用原码表示定点整数和定点小数的一个方法。还有表示的范围,大家需要特别注意,增值零是有两种表示形式的。

14:14

好,接下来看反码。反码其实很简单。当我们得到原码之后,可以判断如果说原码的符号位为零,也就是是一个正数,那么反码和原码其实是相同的。而如果说符号位为一,那么我们只需要在原码的基础上把数值位全部取反就可以。比如像刚才正19这个数,它的原码是这个样子。那由于此时符号位为零,它是一个正数,所以这个数的反码表示和原码表示是一样的。而-19这个数由于符号位为一,所以我们需要把后边的这些数值位在原码的基础上全部取反,就是零变成一一变成0,全部取反。这样的话就得到了-19的1个反码。

14:59

好,再来看小数,小数也是一样的,正的0.75由于符号位为零,所以反码和原码是一样的,保持不变。而负的0.75由于符号位为一,所以反码的这些数值位需要在原码基础上全部取反,零变一,一变零。好,所以这就是定点整数和定点小数的反码,表示我们需要先得到原码,然后再转变成反码。那显然反码和原码之间是有这种一一对应的关系的。所以N加一位的反码整数,它的表示范围和原码肯定也是一致的。

15:34

同样的反码也会拥有负零和正零这样的两种形式。原码的正零是全为零,那反码的正零也是全部为零。原码的负零是首位为一,后面全部是零。根据我们转换的规则,由于符号位为一,所以-0所对应的反码就应该是一,后边全部变成一。除了反码的整数之外,反码的小数和原码也是一一对应的。所以反码的小数的一个表示范围与原码也是相同的。同样负零和正零会有两种形式。好,这就是所谓的反码。

16:11

反码只是原码转变成补码的这个过程当中的一个中间状态。其实在实际当中,反码并没有太大的用处。计算机硬件不会使用反码直接进行加减乘除这些运算。好的,那这就是反码。

16:26

接下来我们要探讨如何基于反码来得到补码。对于一个正数来说,正数的补码所对应的补码其实就是原码。而对于一个负数来说,负数所对应的补码我们可以用反码的末位加一这样的方式迅速的进行转换。

16:45

那加一的过程中我们需要考虑到进位的问题。首先来看用补码来表示定点的整数,对于正19这个数来说,它的原码是这个样子。由于它是一个正数,所以这个真值它所对应的补码形式其实和原码是一模一样的。好,再来看-19,由于这个真值是一个负数,或者说这个符号位它为一。因此我们在求这个真值所对应的补码的时候,就需要先把原码的这些尾数全部取反,得到反码。然后再在反码的末尾这一位再加上一个一。因此-19所对应的补码就应该是这个样子,比起反码来说末尾加了一个一。

17:33

再来看用补码表示的小数正的0.75,这个小数它的原码是这样,由于这是一个正数,所以它所对应的补码形式和原码是一模一样的。我们只需要把原码照搬下来就可以。然后再来看负的0.75,由于它是一个负数,所以我们首先需要把原码的尾数部分全部取反,然后再在反码的末尾加上一个一。那需要注意进位的问题,末位的这两个一相加等于0,往高位进一,一加一又等于0,再往高位进一。直到进到这个位置,0加1等于一再往前就不会再有进位了。好,所以这就是负的0.75这个真值它所对应的补码形式。

18:22

在这个小节中大家先把注意力放在如何在各种码之间进行转换,先放在这个地方,下一小节我们再来解释补码这些东西有什么作用。好,接下来我们再来看一下补码是不是也会有正零和负零这样的问题。首先看正零,由于符号位为零,所以按照刚才我们提出的这个规则,符号位为零。那么它所对应的补码正零所对应的补码和原码是一样的,都是零。

18:52

好,再来看-0,由于符号位为一,所以我们把它看为一个负数。因此负零它所对应的补码形式应该是先把它转换成反码,然后再在反码的末位加1,也就是八个一的末尾再加一个一。那这个加法的结果应该是八个0,然后更高位第九个位会进一个一。但是由于这个地方我们规定机器字长只有八个位,所以我们向更高位进的这个一其实会被丢弃。而第八位留下的这八个零是不是和我们刚才推出的正零这种状态发生了重合,对吧?因此我们用补码的形式来表示增值0,它只会有一种表示形式,就是全零这种方式。

19:43

好,那问题来了,原码当中有两个二进制的状态会对应零这个增值,而在补码中只有其中一种状态表示0,那多出来的这种二进制状态怎么办?对于这个问题我们有一个特别的规定。对于定点整数的补码来说,如果符号位为一,然后后续这些都是零的话,那么我们规定这个补码它所对应的数值是负的二的7次方,这有七位表示数值和负二的7次方,这个七是相对应的那还记不记得对于八位的原码和反码来说,八位所能表示的最小数值应该是负的2的7次方减一对吧?而对于补码来说,它可以多表示一个负数,最小可以表示到负的二的7次方。因此如果机器字长是N加一位,那么补码整数的表示范围应该是这样的,会比原码和反码多一个负的2的N次方,这一点大家也需要注意。

20:48

刚才我们探讨的是用补码表示定点的整数,而如果用补码表示定点小数也有类似的问题。由于正零和负零只有一种表示形式,因此多出来的这个二进制状态,也就是符号位为一,后续全为零。这种状态我们会规定它所对应的值是负一,原码和反码所能表示的最小值应该是负的一减2的负N次方是这样的一个值,而补码可以多表示一个负一。因此同样是N加一个比特位,补码会比原码反码的表示范围更多一个数,不管是整数还是小数都这样。

21:28

好,刚才我们已经知道了对于给定的一个正数或者负数,如何从原码转换到补码。如果我们知道了一个正数的补码,那么想要知道它所对应的原码是很容易的。因为正数的原码和补码是相同的。但是如果给你一个负数的补码符号位为一,那么想要推出它所对应的原码应该怎么办呢?其实这个逆向转换的过程和正向转换的过程是一样的。同样是让尾数全部不取反,然后末尾加一,好来看一下,比如说通过-19的补码来求它的原码,那么我们首先要把这些尾数全部取反,零变一一变零,然后在末尾加1,那得到的结果就是1001001,最后零加一等于一。因此对于一个负数来说,原码转变成补码,还有补码逆向的转变为原码,方法都是一样的,都是尾数全部取反,然后末尾加1。

22:32

再来看一个小数的例子,我们通过-0.75的补码求它的原码,那么首先需要把它的尾数全部取反,1011111。然后再在末尾加1,那加了一之后会有一系列的进位,最后得到的结果应该是1.11,然后后边都是零。所以用这种方式可以得到它所对应的原码,这种算法是没有问题的。

23:02

好,讲到这儿肯定会有很多同学很奇怪,我们搞这么复杂的补码,它到底有什么意义?再次强调这个小节,大家需要把注意力放在这些各种码怎么转换这个问题上。因为这是我们很高频的一个考点。

23:17

好,所以我们先不解释补码的作用,我们继续往后再来看下一种叫做移码。移码很简单,就是在补码的基础上把补码的符号位取反就可以。但是需要注意移码只能用于表示整数,而不能用于表示小数。

23:35

好,来看一下正19的补码已经得到了,只需要把它的符号位取反,就可以得到与之对应的移码。-19也是类似的,只需要把补码的符号位取法,就可以得到与之对应的移码。那由于移码是由补码转换过来的,所以移码和补码的这些数的表示肯定也是一一对应的。也就是说已码的正零和负零它同样只有一种表示形式。另外移码整数的表示范围和补码也会保持一致。这是因为移码和补码是一一映射一一对应的关系。

24:11

好,来看一下移码有什么作用,所有的补码的符号位取反就得到了移码。那你会发现如果把移码的所有二进制位看作是一个无符号数,那么当增值增大的时候,移码所对应的这个无符号数它也是在逐一递增的。所以移码的这种特性就保证了我们可以用计算机硬件来很方便地实现两个移码之间的大小对比。如果要对比两个移码的大小,那么我们可以让计算机硬件从第一个,也就是最高位的这个比特依次往后对比,谁先出现一,那么就谁更大。而如果说两个都同时出现一,继续往后对比就可以。总之,移码的这种特性可以让计算机硬件很方便的判断出哪一个真值更大。

25:02

在之后我们学习的浮点数当中会大量的使用到移码。好,这个表给出了八个比特的机器数,它所对应的原码、反码、补码和移码的值。当然了这给出的只是定点整数,因为移码只能用来表示整数,不能用来表示小数。再次强调原码和反码都有正零和负零这样的两种真值零的状态,而补码和移码只有一种增值零的状态,所以补码和移码可以表示更多一个的负数。好,到此为止我们就初步认识了原码、反码、补码、移码,还有它们之间的一个相互转换。

25:44

接下来我们进行一个练习。好,首先来看定点整数X等于正的50,用八位的原码、反码、补码和移码来表示。那么50首先把它转变为原码,我们先标出每一个二进制对的一个权重。50应该是等于32加16,然后再加上一个二,所以这就是50的1个二进制数表示。由于我们总共需要凑足八位,所以我们会在前边再凑一个零。另外最高位作为符号位,由于是一个正数,所以我们标零,那这就是原码。由于这是一个正数,所以原码反码补码的形式相同,因此反码和补码就不必多说。而移码是在补码的基础上把符号位取反,所以移码也可以很方便的得出。

26:32

好,再来看第二个例子,负的100。首先看一下一百用二进制数怎么来表示。同样的我们首先标出各个位的一个权值,然后100应该是等于64加32,再加上一个四,所以这是100的1个二进制数,总共有七位。由于这是一个负数,所以我们的符号位应该是一,这就是-100的1个原码。由于符号位为一,所以它的反码应该是后边的这些尾数全部取反,零变一一变零就可以得到它的一个反码。补码的话又是在反码的基础上末位加1,那末位加一之后会产生进位,最终得到的补码就是这个样子。最后再来算移码,移码只需要在补码的基础上把符号位从一变成零就可以。好,这就是-100的原码、反码、补码和移码。

27:29

好,这是把真值转换成这几种码。接下来我们再来看这几种码转换成真值。我们这儿给出的二进制序列都是一样的。先看原码,它的符号位是一,所以它肯定是一个负数。那它的绝对值是多少呢?1248,所以应该是1加4加8等于13,因此这原码所对应的真值就是-13。再看反码,要求反码所对应的真值,我们首先得把它恢复成原码,所以这个反码的尾数恢复成原码应该是这个样子,所以这个反码所对应的值应该是负的64加32加16再加2,结果应该是负的114。

28:13

好,再看下一个补码。同样的我们首先需要把补码转换成原码。那之前我们是不是说过补码转换成原码的方式和原码转换成补码是一样的,都是把末尾的这些尾数全部取反,然后再在末尾加1。所以这个补码转换为与之对应的原码就应该是这个样子。好,那恢复成原码之后就可以知道它的增值是多少,应该是负的。6 4加3 2加16加2,然后这儿还要加一,所以就应该是负的115。

28:47

好,最后看这个移码,我们首先需要把移码转换成补码,也就是把这个符号位变为零。符号位为零表示这是一个正数,正数的补码和原码是相同的,所以符号位变为零就可以直接得到原码。那这个数值转换过来就应该是正的13。

29:07

好,继续。我们把刚才这一堆的符号位全部从一变为零,然后来求与之对应的真值。由于符号位为零,所以原码补码反码都是同一个意思。那1101应该是对应13。

29:24

再来看最后的移码,我们首先需要把移码的符号位由零变为一,得到与之对应的补码。然后再把这一串补码转变成与之对应的原码。好,之前我们算过这串补码它所对应的值应该是负的115。因此这个代码最终转换为增值也是负的115。

29:45

好,通过这些练习,相信大家对各种码之间的一个转换应该比较熟悉了。最后我们再来补充一个快速转换的技巧。如果告诉你一个真值X的补码,让你求负X的补码应该怎么求呢?一个比较常规的方法是你可以先从补码恢复成它的原码,然后再通过原码来求负的X的补码。但这种方法比较慢。

30:11

一个更快的方法是我们可以直接把符号位和数值位全部取反,然后再在末尾加1。比如现在我们已经知道了13的补码是多少,那按照刚才说到的这个方法,我们把符号位和所有的这些尾数全部取反,然后再在末尾加1,这样我们就直接得到了-13的补码形式。再比如我们已经知道-115的补码,我们现在要求正的115补码是多少,那我们可以把所有的这些位全部取反,然后再在末尾加1。那大家可以自己验证一下,这就是115的一个补码,其实也就是它的原码。好,这是一个加快大家解题的小技巧。

30:57

好的,这个小节我们学习的内容比较多,我们学习了如何把真值用原码、反码、补码和移码的方式来表示。但是需要注意移码只能用于表示整数,而不能用于表示定点小数。无论是用哪种码,只要我们表示的是定点整数,我们都默认小数点是隐含在最低位的后面。而对于定点小数来说,无论我们用哪种码,我们都默认小数点是隐含在符号位的后面。各种码之间的转换既是我们的考试重点,也是我们接下来学习的一个基础。这张图已经给大家做好了总结,大家可以暂停再来回顾一下。

31:37

另外我们还需要注意到一个问题,就是这些各种码字它们对真值零的表现形式原码和反码有正零和负零这样的两种状态,而补码和移码表示真值零只能有一种表示形态,也正是由于这个原因,所以原码、反码还有补码、移码,他们的一个整数的表示范围会有所不同。对于补码来说,小数的表示范围也会不一样,可以多表示一个负一。由于移码只能用于表示整数,所以我们不探讨它的小数表示范围。

32:11

对于移码来说,所有二进制位为零的时候,它所对应的真值是最小的。所有二进制位全为一的时候,所对应的值是最大的那基于这样的特性,两个移码之间可以很方便的用硬件来进行大小的对比。好的,以上就是这个小节的全部内容。

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值