diff --git a/Computer-Organization/0-summary-ex.md b/Computer-Organization/0-summary-ex.md index c2d0616..82e8a49 100644 --- a/Computer-Organization/0-summary-ex.md +++ b/Computer-Organization/0-summary-ex.md @@ -70,7 +70,7 @@ $C.$状态寄存器 $D.$通用寄存器 -解:$B$。汇编程序员可以通过指定待执行指令的地址来设置$PC$的值,状态寄存器、通用寄存器只有为汇编程序员可见,才能实现编程,所以不是完全透明的。而$IR$、$MAR$、$MDR$是$CPU$的内部工作寄存器,对程序员均不可见。 +解:$B$。在计算机概念中透明是指看不到,而不是能看的很清楚,所以这个题目指用户看不到哪个寄存器。汇编程序员可以通过指定待执行指令的地址来设置$PC$的值,状态寄存器、通用寄存器只有为汇编程序员可见,才能实现编程,所以不是完全透明的。而$IR$、$MAR$、$MDR$是$CPU$的内部工作寄存器,对程序员均不可见。 ## 计算机性能指标 @@ -116,7 +116,27 @@ $C.$指令集 $D.$计算机组织 -解:$A$。$CPI$是执行一条指令所需的时钟周期数,系统结构、指令集、计算机组织都会影响$CPI$,而时钟频率并不会影响$CPI$,但可加快指令的执行速度。 +解:$A$。$CPI$是执行一条指令所需的时钟周期数,系统结构、指令集、计算机组织都会影响$CPI$,而时钟频率并不会影响$CPI$,但可加快指令的执行速度(一秒内时钟周期增多)。 + +**例题** 下列说法中,正确的是()。 + +Ⅰ.在微型计算机的广泛应用中,会计电算化属于科学计算方面的应用 + +Ⅱ.决定计算机计算精度的主要技术是计算机的字长 + +Ⅲ.计算机“运算速度”指标的含义是每秒能执行多少条操作系统的命令 + +Ⅳ.利用大规模集成电路技术把计算机的运算部件和控制部件做在一块集成电路芯片上,这样的一块芯片称为单片机 + +$A.$Ⅰ、Ⅲ + +$B.$Ⅱ、Ⅳ + +$C.$Ⅱ + +$D.$Ⅰ、Ⅲ、Ⅳ + +解:$C$。Ⅰ会计电算化是指会计业务通过计算机计算来简化计算压力,属于数据处理方面,而科学计算是指科学研究的大数据计算方面。Ⅲ含义是指多少条指令而不是单指操作系统指令。Ⅳ这种集成运算器和控制器的芯片是$CPU$,而单片机不止包括$CPU$还包括一些外围接口,且运算能力不如$CPU$。 **例题** 下列关于“兼容”的叙述,正确的是()。 diff --git a/Computer-Organization/0-summary.md b/Computer-Organization/0-summary.md index 69e77fe..da94abc 100644 --- a/Computer-Organization/0-summary.md +++ b/Computer-Organization/0-summary.md @@ -92,7 +92,7 @@ + 存储体:存储数据的主体,按地址存取。(相联存储器按内容访存) + $MAR$:($Memory\,Address\,Register$)存储地址寄存器,用于访存地址,经过存放地址译码后所选的存储单元。$MAR$位数反映存储单元个数的幂值,与$PC$(程序计数器)长度相等(因为都是指向内存地址),如$MAR$有$10$位,则有$2^{10}=1024$个存储单元。 -+ $MDR$:($Memory\,Data\,Register$)存储数据寄存器,用于暂存要从存储器中读或写的信息。$MDR$位数=存储字长,一般为字节的二次幂的整数倍。 ++ $MDR$:($Memory\,Data\,Register$)存储数据寄存器,用于暂存要从存储器中读或写的信息。$MDR$位数=存储字长,一般为字节的二次幂的整数倍。(存储字长不等于数据字长,数据字长是数据总线一次性传输的信息位数) + 时序控制逻辑:产生存储器操作时所需的各种时序信号。 存储器相关概念: diff --git a/Computer-Organization/1-data-representation-and-operation-ex.md b/Computer-Organization/1-data-representation-and-operation-ex.md index 92a00da..03fbf09 100644 --- a/Computer-Organization/1-data-representation-and-operation-ex.md +++ b/Computer-Organization/1-data-representation-and-operation-ex.md @@ -30,23 +30,33 @@ $B.0\,1000\,0\,111\,1\,1\,11$ 根据海明不等式,$2^r\geqslant k+r+1$,即$2^r\geqslant 8+r+1$,解得$r=4$,又需要全校验,所以$P_{13}$为全校验位。 -所以校验位一共有$P_1$、$P_2$、$P_4$、$P_8$、$P_{13}$。 +所以校验位一共有$P_1$、$P_2$、$P_4$、$P_8$、$P_{13}$($E_1$、$E_2$、$E_3$、$E_4$、$E_5$)。 因为数据从右到左,所以: 数据位|13|12|11|10|9|8|7|6|5|4|3|2|1 :-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-: -编码|$P_{13}$|$D_8$|$D_7$|$D_6$|$D_5$|$P_8$|$D_4$|$D_3$|$D_2$|$P_4$|$D_1$|$P_2$|$P_1$ +编码|$P_{13}$|$P_{12}$|$P_{11}$|$P_{10}$|$P_9$|$P_8$|$P_7$|$P_6$|$P_5$|$P_4$|$P_3$|$P_2$|$P_1$ +编码|$E_5$|$D_8$|$D_7$|$D_6$|$D_5$|$E_4$|$D_4$|$D_3$|$D_2$|$E_3$|$D_1$|$E_2$|$E_1$ 位置二进制|1101|1100|1011|1010|1001|1000|0111|0110|0101|0100|0011|0010|0001 数值||1|0|1|0||1|0|1||1 接下来就只用求对应的$P$就可以了。 -根据位置二进制,$P_1$验证地址第四位为$1$的数据,即$D_1$、$D_2$、$D_4$、$D_5$、$D_7$,$P_1=D_1\oplus D_2\oplus D_4\oplus D_5=1$。$P_2$验证地址第三位为$1$的数据,即$P_2=D_1\oplus D_3\oplus D_4\oplus D_6\oplus D_7=1$。$P_4$验证地址第二位为$1$的数据,即$P_4=D_2\oplus D_3\oplus D_4\oplus D_8=1$。$P_8$验证地址第一位为$1$的数据,即$P_8=D_5\oplus D_6\oplus D_7\oplus D_8=0$,$P_{13}=D_8\oplus D_7\oplus D_6\oplus D_5\oplus P_8\oplus D_4\oplus D_3\oplus D_2\oplus P_4\oplus D_1\oplus P_2\oplus P_1=0$,填入表格: +根据$P$位置二进制,$P_1$验证地址第四位为$1$的数据,即$D_1$、$D_2$、$D_4$、$D_5$、$D_7$,$P_1=P_3\oplus P_5\oplus P_7\oplus P_9\oplus P_{11}=D_1\oplus D_2\oplus D_4\oplus D_5\oplus D_7=1$。 + +$P_2$验证地址第三位为$1$的数据,即$P_2=P_3\oplus P_6\oplus P_7\oplus P_{10}\oplus P_{11}=1=D_1\oplus D_3\oplus D_4\oplus D_6\oplus D_7=1$。 + +$P_4$验证地址第二位为$1$的数据,即$P_4=P_5\oplus P_6\oplus P_7\oplus P_{12}=D_2\oplus D_3\oplus D_4\oplus D_8=1$。 + +$P_8$验证地址第一位为$1$的数据,即$P_8=P_9\oplus P_{10}\oplus P_{11}\oplus P_{12}=D_5\oplus D_6\oplus D_7\oplus D_8=0$。 + +$P_{13}=D_8\oplus D_7\oplus D_6\oplus D_5\oplus E_4\oplus D_4\oplus D_3\oplus D_2\oplus E_3\oplus D_1\oplus E_2\oplus E_1=0$,填入表格: 数据位|13|12|11|10|9|8|7|6|5|4|3|2|1 :-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-: -编码|$P_{13}$|$D_8$|$D_7$|$D_6$|$D_5$|$P_8$|$D_4$|$D_3$|$D_2$|$P_4$|$D_1$|$P_2$|$P_1$ +编码|$P_{13}$|$P_{12}$|$P_{11}$|$P_{10}$|$P_9$|$P_8$|$P_7$|$P_6$|$P_5$|$P_4$|$P_3$|$P_2$|$P_1$ +编码|$E_5$|$D_8$|$D_7$|$D_6$|$D_5$|$E_4$|$D_4$|$D_3$|$D_2$|$E_3$|$D_1$|$E_2$|$E_1$ 数值|0|1|0|1|0|1|1|0|1|1|1|1|1 #### 循环冗余校验码 @@ -159,7 +169,7 @@ $D.X_1=1$ 运算器结构:$ACC$与$MQ$相连,数据流是双向的,$ACC$与$ALU$相连,数据流是双向的,$X$的数据流向$ALU$。 -此时$MQ=01011$,作为乘法单位的最后位为1,所以$ACC+=X$,从而$=00000+01101=01101$,这就是第一个的位积。 +此时$MQ=01011$,作为乘法单位的最后位为$1$,所以$ACC+=X$,从而$ACC=00000+01101=01101$,这就是第一个的位积。 由于按照乘法规则,第二个位积计算时需要错位相加,计算机的处理方式是$ACC$和$MQ$的数据连在一起,全部逻辑右移一位(左边补$0$)。 diff --git a/Computer-Organization/1-data-representation-and-operation.md b/Computer-Organization/1-data-representation-and-operation.md index 014d82d..256d9f9 100644 --- a/Computer-Organization/1-data-representation-and-operation.md +++ b/Computer-Organization/1-data-representation-and-operation.md @@ -15,13 +15,13 @@ #### R进制 -+ 基数:每个数码位所用到的不同符号的个数,r进制的基数$r$。 -+ R进制转换为十进制:$K_nK_{n-1}\cdots K_2K_1K_0K_{-1}K_{-2}\cdots K_{-m}=K_n\times r^n+K_{n-1}\times r^{n-1}\cdots K_2\times r^2+K_1\times r^1+K_0\times r^0+K_{-1}\times r^{-1}+K_{-2}\times r^{-2}\cdots K_{-m}\times r^{-m}=\sum_{i=-m}^nK_i\times r^i$。 ++ 基数:每个数码位所用到的不同符号的个数,$r$进制的基数$r$。 ++ $R$进制转换为十进制:$K_nK_{n-1}\cdots K_2K_1K_0K_{-1}K_{-2}\cdots K_{-m}=K_n\times r^n+K_{n-1}\times r^{n-1}\cdots K_2\times r^2+K_1\times r^1+K_0\times r^0+K_{-1}\times r^{-1}+K_{-2}\times r^{-2}\cdots K_{-m}\times r^{-m}=\sum_{i=-m}^nK_i\times r^i$。 + 二进制:$0$、$1$。 + 使用二进制的原因: 1. 可使用两个稳定状态的物理器件表示。 2. $0$,$1$正好对应逻辑值假、真。方便实现逻辑运算。 - 3. 可很方便地使用逻辑门电路实现算术运算。 + 3. 可很方便地使用逻辑门电路实现算术运算。(物理部件性质决定) + 八进制:$0\sim7$。可以用下标方式表明,也可以用结束的$O$或开头的$0$表示。如$(1643)_8$、$01643$、$1643O$。 + 十进制:$0\sim9$。可以用下标方式表明,也可以用结束的$D$表示,如$(1643)_{10}$、$1643D$。 + 十六进制:$0\sim9$、$A$、$B$、$C$、$D$、$E$、$F$。可以用下标方式表明,也可以用结束的$H$或开头的$0x$表示。如$(1643)_{16}$、$0x1643$、$1643H$。 @@ -60,16 +60,18 @@ + 分为整数部分和小数部分:$K=N+F$。 + 首先把整数拿出来得到$N=K_n\times r^n+K_{n-1}\times r^{n-1}\cdots K_2\times r^2+K_1\times r^1+K_0\times r^0$。 + 对这个数除以基数$r$,得到$X=K_n\times r^{n-1}+K_{n-1}\times r^{n-2}\cdots K_2\times r^1+K_1\times r^0$,这时候就会得到一个余数$K_0$。所以$N=rX+K_0$,这时候就能算出$K_0$这个位数了。 -+ 同理再将得到的商$X$同样除以$r$,就能得到$K_1$,所以不断递归就会得到整数部分所有的$K_i$。 ++ 同理再将得到的商$X$同样除以$r$,就能得到$K_1$,所以不断递归就会得到整数部分所有的$K_i$。商为$0$时结束。 + 得到的$K_i$是从低位排到高位。 + 对于小数部分$F=K_{-1}\times r^{-1}+K_{-2}\times r^{-2}\cdots K_{-m}\times r^{-m}$。 + 对这个数乘基数$r$,得到$K_{-1}\times r^0+K_{-2}\times r^{-1}\cdots K_{-m}\times r^{-m+1}$,取这个常数$K_{-1}$就是想要的答案。将乘积减去这个整数部分得到后面处理的数据 -+ 同理再将得到的数据不断乘基数,就能得到小数部分所有的$K_i$。 ++ 同理再将得到的数据不断乘基数,就能得到小数部分所有的$K_i$。积为$1.0$时结束。 + 得到的$K_i$是从高位排到低位。 + 将整数和小数合在一起就是最后的结果。 + 有时候小数会出现无法彻底转换的情况,需要考虑保留多少位。 -同理也可以使用拼凑法将数字拼凑成对应的数值。这种方法对于只有整数的数值比较好用。 +基本上都是十进制转为二进制,然后由二进制转为十六进制或八进制,具体转换过程见例题。 + +同理也可以使用拼凑法将数字相减拼凑成对应的数值。这种方法对于只有整数的数值比较好用。 $2^{12}$|$2^{11}$|$2^{10}$|$2^{9}$|$2^{8}$|$2^{7}$|$2^{6}$|$2^{5}$|$2^{4}$|$2^{3}$|$2^{2}$|$2^{1}$|$2^{0}$|$2^{-1}$|$2^{-2}$|$2^{-3}$ :-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----: @@ -95,11 +97,11 @@ $8421$码是一种有权码,第$1$、$2$、$3$、$4$位分别对应$8$、$4$ :-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-: 0000|0001|0010|0011|0100|0101|0110|0111|1000|1001 -$8421$码就是十六进制的表达形式。如$46H=0100\,0110$,$985$用$8421$码表示就是$1001\,1000\,0101$。 +$8421$码就是二进制表达十进制,只不过十进制只进行简单的对照二进制并进行一位位的拼接,与真正的二进制和十六进制不同。如十六进制的$46H=$二进制的$0100\,0110=$十进制的$38D=8421$码的$0011\,1000$,$985$用$8421$码表示就是$1001\,1000\,0101$。 -使用$8421$码表示的数字进行算术运算的方式是先按照二进制的方式进行运算,若最后结果不在映射表中,即落在没有定义的$1010$到$1111$中,就直接加上$6$(因为有六位无效,所以加上六位跳过无效的位数)从而进一位,多了一段补全$0$。每个段对应的数值合在一起就是原来的结果。 +使用$8421$码表示的数字进行算术运算的方式是先按照二进制的方式进行运算,若最后结果不在映射表中,即落在没有定义的$1010$到$1111$中,就直接加上$6$(因为有六位无效,所以加上六位跳过无效的位数)从而向前面一个数字段进一位加一,高位补全$0$。每个段对应的数值合在一起就是原来的结果。 -如$5+8=0101+1000=1101=13$,不在映射表中,则对$1101$加$6$,即计算$19$,得到$1\,0011$这个值,补齐得到$0001\,0011$,而按照$8421$码,最高位的$0001$不再代表权值$16$,而代表十位的$1$,而后面是$3$,从而组合在一起就代表了$13$。 +如$5+8=0101+1000=1101=13$,不在映射表中,则对$1101$进行二进制的加$6D=0110$,即计算$1101+0110=1\,0011$,补齐得到$0001\,0011$,而按照$8421$码,最高位的$0001$不再代表权值$16$,而代表十位的$1$,而后面是$3$,从而组合在一起就代表了$13$。 #### 余三码 @@ -147,7 +149,8 @@ $ASCII$码,数字英文符号一共$128$个字符,使用$7$位就可以表 + 若一个计算机按字节编址,则每个地址对应$Q1B$。 + 很多语言中将$'\backslash0'$即$00H$作为字符串结束标志。 + 大端模式:将数据的最高有效字节存放在低地址单元中。 -+ 小端模式:将数据的最高有效字节存放在高地址单元中 ++ 小端模式:将数据的最高有效字节存放在高地址单元中。 ++ 计算机默认是小端模式,人类常用书写方式是大端模式。 ### 数据校验 @@ -156,22 +159,29 @@ $ASCII$码,数字英文符号一共$128$个字符,使用$7$位就可以表 + 校验原理就是将更多字节映射到有限个合法状态,从而有多个冗余的非法状态,更容易判断是否非法。 + 码字:由若干位代码组成的一个字。 + 两个码字间的距离:将两个码字逐位进行对比,具有不同的位的个数。 -+ 码距:一种编码方案可能有若干个合法码字,各合法码字间的最小距离。 -+ 当码距$=1$时,无检错能力;当码距$=2$时,有检错能力;当码距$\geqslant3$时,若设计合理,可能具有检错、纠错能力。 ++ 码距:一种编码方案可能有若干个合法码字,即为各任意合法码字间最少变化的二进制最小位数。(如$1000$与$1001$码距为$1$,$1111$码距为$3$) + +#### 纠错理论 + +当码距$=1$时,无检错能力;当码距$=2$时,有检错能力;当码距$\geqslant3$时,若设计合理,可能具有检错、纠错能力。 + +$L-1=D+C$且$D\geqslant C$。即编码最小码距$L$越大,其检测错误的位数$D$越大,纠正错误的位数$C$也越大,且纠错能力恒小于等于检错能力。 #### 奇偶校验码 -+ 奇校验码:整个校验码(有效信息位和校验位)中为$1$的个数为奇数。 -+ 偶校验码:整个校验码(有效信息位和校验位)中为$1$的个数为偶数。 -+ 偶位数出错时无法校验。 +即通过在数据上添加一位校验位让所有数据为$1$的位的个数为奇数或偶数。 + ++ 奇校验:让整个校验码(有效信息位加上校验位)中为$1$的个数为奇数。 ++ 偶校验:让整个校验码(有效信息位加上校验位)中为$1$的个数为偶数。 ++ 偶数个位数出错时无法校验。 + 对原始数据进行异或(模二加)运算,得到的结果即为校验位。 + 对所有数据进行异或运算,结果为$0$表示未出错,为$1$代表出错。 -+ 码距为$2$,只能检错,不能纠错。 ++ 码距为$2$,只能检错,不能纠错。(为$1$的位数的个数为偶数或奇数,偶数和偶数,奇数和奇数之间最小差距为$2$,所以码距为$2$) #### 海明码 + 将信息分组进行偶校验,从而得到多个校验位,从而能携带多种状态信息。 -+ 设信息位为$n$,校验位为$k$,从而能表达$2^k$中状态,而信息位+校验位一共$n+k$位,只错一位的状态种数加上一种正确状态为$n+k+1$,从而$2^k\geqslant n+k+1$。 ++ 设信息位为$n$,校验位为$k$,从而校验位能表达$2^k$种状态,而传输总数据位数=信息位+校验位一共$n+k$位,只错一位的状态种数加上一种正确状态为$n+k+1$,从而$2^k\geqslant n+k+1$。 + 令信息位为$D_i$,校验位为$P_j$,总海明码为$H_k$,其中校验位$P_j$必须放在海明码$H_k$位号位$2^{j-1}$的位置上,即$1$、$2$、$4$、$8$等。 + 如果没有发生错误,则每一位进行检错都是$0$,若出现$1$,则说明出错。 + 为了检测是一位错还是两位错,一般会加上一个全校验位,对整体进行偶校验。 @@ -188,14 +198,14 @@ k|2|3|4|5|6|7 2. $K$个信息位+$R$个校验位作为“被除数”,添加校验位后需保证除法的余数为$0$。 3. 收到数据后,进行除法检查余数是否为$0$。 + 得到$CRC$码的方法: - 1. 确定$K$和$R$以及生成多项式对应的二进制码。其中R位生成多项式的最高次幂数。 - 2. 将信息码左移R位,低位补$0$。 - 3. 使用模二除法。 + 1. 确定$K$和$R$以及生成多项式对应的二进制码。其中$R$位生成多项式的最高次幂数。 + 2. 将信息码左移$R$位,低位补$0$。 + 3. 使用模二除法。(即相减时是异或运算,不能向上进位或借位;除法取余数时也不比较除数与被除数除第一位以外的低位大小,只需要相同的位数,这是由于异或加减法不进行进借位的特征) 4. 余数就是校验位,只比多项式少一位。 - 5. 对全部数据进行多项式除,余数为$0$代表无措。 + 5. 对全部数据进行多项式除,余数为$0$代表无错。 6. 若余数不为$0$,则出错。 7. 若$n$个信息位,$k$个校验位,若生成多项式得当,且$2^k\geqslant n+k+1$,则$CRC$码可纠正一位错。实际上基本上不怎么用来纠错。 -+ 检错:将收到的$CRC$码用生成多项式$G(x)$做模二出发,若除数为$0$则码字无误,若只有一位为$1$,则该位出错,更多位则无法检错。即只具有一位的检错纠错能力。 ++ 检错:将收到的$CRC$码用生成多项式$G(x)$做模二除法,若除数为$0$则码字无误,若只有一位为$1$,则该位出错,直接取反,更多位则无法检错。即只具有一位的检错纠错能力。 ## 定点数 @@ -208,11 +218,13 @@ k|2|3|4|5|6|7 + 整个机器字长的全部二进制位均为数值位,没有符号位,相当于数的绝对值。 + $n$位无符号数表示范围为$[0,2^n-1]$。 + 无符号数不涉及小数。 ++ 无符号数只有原码的概念,没有反码、补码、移码。 #### 有符号数 ++ 假设机器字长$n+1$位,符号位$1$位,有效数字位$n$位。 + 定点整数:最高一位是符号位,$0$是正,$1$是负,小数点位置一般隐含在最后。范围为$[-(2^n-1),2^n-1]$。 -+ 定点小数:最高一位是符号位,$0$是正,$1$是负,小数点位置隐含在符号位后面。范围为$[-(1-2^{-n}),1-2^{-n}]$。 ++ 定点小数:最高一位是符号位,$0$是正,$1$是负,小数点位置隐含在符号位后面,是纯小数。范围为$[-(1-2^{-n}),-2^{-n}]\cup[2^{-n},1-2^{-n}]$。 + 数值部分也称为尾数。要保存一个非整数需要保存定点整数与定点小数两个部分。 #### 原码 @@ -222,17 +234,22 @@ k|2|3|4|5|6|7 + 若使用$1B$来保存数值,则$+19D$就是$0001\,0011$,$-19D$就是$1001\,0011$。 + 有时$1001\,0011$会写为$1,0010011$,其中的逗号只是为了标注正负号,本身是不存在的。 + 若未指明机器字长,则最开头的多个$0$可以省略。如$1001\,0011$可以表示为$1,10011$。 -+ 同理小数也可以使用$1.11$表示,这是指$-0.11$而不是$1.11$的真值。 ++ 同理小数也可以使用$1.11$表示,这是指$-0.11$而不是真值$1.11$。 + 若机器字长$n+1$位,则原码整数的表示范围是$[-(2^n-1),2^n-1]$。 -+ 若机器字长$n+1$位,则原码小数的表示范围是$[-(1-2^{-n}),1-2^{-n}]$。 -+ 原码表示时真值$0$有$+0$和$-0$两种形式。 ++ 若机器字长$n+1$位,则原码小数的表示范围是$[-(1-2^{-n}),-2^{-n}]\cup[2^{-n},1-2^{-n}]$。 ++ 原码表示时真值$0$有$+0$和$-0$两种形式,因为符号位对$0$没有影响,所以造成了一定的空间浪费和错乱。 + + #### 反码 + 反码:若符号位为$0$,则反码与原码相同,若符号位为$1$,则数值位全部取反。 + 可以转换为原码再取反。 + 若机器字长$n+1$位,则反码整数的表示范围是$[-(2^n-1),2^n-1]$。 -+ 若机器字长$n+1$位,则反码小数的表示范围是$[-(1-2^{-n}),1-2^{-n}]$。 ++ 若机器字长$n+1$位,则反码小数的表示范围是$[-(1-2^{-n}),-2^{-n}]\cup[2^{-n},1-2^{-n}]$。 ++ 范围表示没有变化。 + 反码表示时真值$0$有$+0$和$-0$两种形式。 + 反码只是由原码转换为补码的一个中间态,实际上并没有作用。 @@ -240,22 +257,23 @@ k|2|3|4|5|6|7 + 补码:若符号位为$0$,则反码与原码相同,若符号位为$1$,则数值位全部取反再加一,即反码加一。 + 补码表示时真值$0$只有一种形式$0000\,0000$。 -+ 多出来的一种形式$1000\,0000$表示$-2^7$和$-1$。 -+ 若机器字长$n+1$位,则补码整数的表示范围是$[-2^n,2^n-1]$。 -+ 若机器字长$n+1$位,则补码小数的表示范围是$[-1,1-2^{-n}]$。 -+ 将负数补码转回原码的方法相同:尾数取反,末位加一。补码的补码就是原码。 -+ 如果已知一个数值的补码,那么求这个值的负数的补码就是全部包括位取反,末位加一。 -+ 如果已知一个负数的补码,那个求这个值的原码就是数值位取反再加一,或是负数补码中,最右边的$1$以及右边不变,最右边的$1$的左边取反。 ++ 多出来的一种形式$1000\,0000$表示正数的$-2^7$和小数的$-1$。 ++ 若机器字长$n+1$位,则补码整数的表示范围是$[-2^n,2^n-1]$。(比原码多个$-128$) ++ 若机器字长$n+1$位,则补码小数的表示范围是$[-1,1-2^{-n}]$。(比原码多个$-1$) ++ 负数补码转回原码:尾数取反,末位加一;或是负数补码中,最右边的$1$以及右边不变,最右边的$1$的左边取反。 ++ 数值的补码求其负数的补码:全部位包括符号位取反,末位加一。 ++ 对一个整数的补码再求补码,等于该整数自身。 + 补码算术移位:将补码的符号位与数值位一起右移一位并保持原符号位的值不变,表示除二。 -+ 变形补码:又称为模四补码,双符号位的补码小数,用$00$表示正,$11$表示负,用于完成算术运算的$ALU$部件中。 ++ 变形补码:又称为模四补码,即双符号位的补码小数,用$00$表示正,$11$表示负,用于完成算术运算的$ALU$部件中。 #### 移码 -+ 补码的基础上将符号位取反。即在真值上加上一个常数,一般为$2^n$。 ++ 一般是在补码的基础上只将符号位取反,即在真值上加上一个常数偏移量$2^n$。也可能加上不同的偏移量。 + 移码只能用于表示整数,而不能表示定点小数。一般用来表示浮点数的阶码。 + 若机器字长$n+1$位,则移码整数的表示范围是$[-2^n,2^n-1]$。 + 若机器字长$n+1$位,则移码小数的表示范围是$[-1,1-2^{-n}]$。 -+ 移码由于负数的最高位为$0$,正数的最高位为$1$,从而能更方便对比大小。 ++ 只有一个零的表示$10\cdots0$。 ++ 移码由于负数的最高位为$0$,正数的最高位为$1$,所以保证了原数据大小顺序,从而能更方便对比大小。 机器数|无符号数|原码|反码|补码|移码 :----:|:------:|:--:|:--:|:--:|:--: @@ -280,7 +298,7 @@ k|2|3|4|5|6|7 + 带余除法:设$x,m\in Z$,$m>0$则存在唯一决定的整数$q$和$r$,使得$x=q\cdot m+r\,,0\leqslant r