建设网站需要的资源,小程序后台管理系统,白酒网站建设,乱码链接怎么用文章目录一、进位计数制1.1 其他进制转十进制1.2 十进制转其他进制1.3 二进制、八进制和十六进制1.3 真值和机器数二、BCD码2.1 8421码2.2 余3码2.3 2421码三、整数的表示和运算3.1 无符号整数3.1.1 无符号整数的表示3.1.2 无符号整数的运算3.2 有符号整数3.2.1 有符号整数的表…
文章目录一、进位计数制1.1 其他进制转十进制1.2 十进制转其他进制1.3 二进制、八进制和十六进制1.3 真值和机器数二、BCD码2.1 8421码2.2 余3码2.3 2421码三、整数的表示和运算3.1 无符号整数3.1.1 无符号整数的表示3.1.2 无符号整数的运算3.2 有符号整数3.2.1 有符号整数的表示3.2.2 有符号整数的补码运算四、定点小数的表示和运算一、进位计数制
不同的进制每一位的位权不一样。如数字KnKn−1...K2K1K0.K−1K−2...K−mK_{n}K_{n-1}...K_{2}K_{1}K_{0}.K_{-1}K_{-2}...K_{-m}KnKn−1...K2K1K0.K−1K−2...K−m以小数点为分界线小数点以前的n1位数字的位权从右到左依次是r0,r1,...,rn−1r^{0},r^{1},...,r^{n-1}r0,r1,...,rn−1;小数点以后的m位数字的位权从左至右依次是r−1,r−2,...,r−mr^{-1},r^{-2},...,r^{-m}r−1,r−2,...,r−m.其中r是该数字的基数不同进制的基数不同十进制每一位可能出现的字符是09共10个则十进制的基数是10二进制每一位可能出现的字符是0或1则二进制的基数是2.
1.1 其他进制转十进制
任意进制要想转换为十进制只需要将该数字的每一位与本位的位权相乘再将结果相加即可。 二进制转为十进制101.11×220×211×201×2−15.5101.1 1\times2^{2}0\times2^{1}1\times2^{0}1\times2^{-1}5.5101.11×220×211×201×2−15.5 八进制转为十进制5.45×804×8−15.55.4 5\times8^{0}4\times8^{-1}5.55.45×804×8−15.5 十六进制转为十进制5.85×1608×16−15.55.85\times16^{0}8\times16^{-1}5.55.85×1608×16−15.5 1.2 十进制转其他进制
十进制转换为其他进制要分为小数点前后的整数部分和小数部分。对于整数部分使用除基取余的方法先取得“余”是整数的低位对于小数部分使用乘基取整的方法先取的“整”是小数的高位。 对于任意的r进制数字要转换为十进制KnKn−1...K2K1K0.K−1K−2...K−mKn×rnKn−1×rn−1...K2×r2K1×r1K0×r0K−1×r−1K−2×r−2...K−m×r−mK_{n}K_{n-1}...K_{2}K_{1}K_{0}.K_{-1}K_{-2}...K_{-m}K_{n}\times r^{n}K_{n-1}\times r^{n-1}...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}...K_{-m}\times r^{-m}KnKn−1...K2K1K0.K−1K−2...K−mKn×rnKn−1×rn−1...K2×r2K1×r1K0×r0K−1×r−1K−2×r−2...K−m×r−m. 其整数部分若除以基数即Kn×rnKn−1×rn−1...K2×r2K1×r1K0×r0rKn×rn−1Kn−1×rn−2...K2×r1K1×r0......K0\frac{K_{n}\times r^{n}K_{n-1}\times r^{n-1}...K_{2}\times r^{2}K_{1}\times r^{1}K_{0}\times r^{0}}{r}K_{n}\times r^{n-1}K_{n-1}\times r^{n-2}...K_{2}\times r^{1}K_{1}\times r^{0}......K_{0}rKn×rnKn−1×rn−1...K2×r2K1×r1K0×r0Kn×rn−1Kn−1×rn−2...K2×r1K1×r0......K0其中K0K_{0}K0为余数其余的为商并且K0rK_{0}rK0r不难看出K0K_{0}K0就是该r进制数整数部分的最低位将商继续除以基数r就可以依次获得高位。 其小数部分若乘以基数即K−1×r−1K−2×r−2...K−m×r−m×rK−1×r0K−2×r−1...K−m×r−m1K_{-1}\times r^{-1}K_{-2}\times r^{-2}...K_{-m}\times r^{-m} \times rK_{-1}\times r^{0}K_{-2}\times r^{-1}...K_{-m}\times r^{-m1}K−1×r−1K−2×r−2...K−m×r−m×rK−1×r0K−2×r−1...K−m×r−m1由于r是大于1的则r的负指数必然小于1因此该结果的整数部分为K−1K_{-1}K−1这样就得到了小数部分的第一位以此类推可以得到更低的几位。 这里需要注意的是十进制转换为其他进制的时候想要得到目标进制整数部分的时候需要除法操作取余数每次的被除数是上一次的商这样算下去一定会算到商为0此时整数部分的计算也就完成了。而小数部分需要进行乘法操作每次都要用小数部分与基数相乘取积的整数部分直到积为0为止但是有时候我们永远都无法乘到0如0.3转换为二进制几次乘法之后会发现开始了循环导致永远也乘不到严格的0这也就导致了小数部分不精确因此十进制可能无法严格转换为其他进制。 十进制转换为二进制75.3 整数部分75237...1\frac{75}{2}37...127537...1 37218...1\frac{37}{2}18...123718...1 18209...0\frac{18}{2}09...021809...0 09204...1\frac{09}{2}04...120904...1 04202...0\frac{04}{2}02...020402...0 02201...0\frac{02}{2}01...020201...0 01200...1\frac{01}{2}00...120100...1 整数部分结果为1001011 小数部分0.3×20.600.60.3\times20.600.60.3×20.600.6 0.6×21.210.20.6\times21.210.20.6×21.210.2 0.2×20.400.40.2\times20.400.40.2×20.400.4 0.4×20.800.80.4\times20.800.80.4×20.800.8 0.8×21.610.60.8\times21.610.60.8×21.610.6 .................. 小数部分结果为011001… 则75.3转换为二进制为1001011.01001… 1.3 二进制、八进制和十六进制
二进制与八进制和十六进制可以快速转换。三位二进制可以组成一位八进制四位二进制可以组成一位十六进制。若二进制位数不够小数点前需高位补0小数点后需低位补0. 二进制 — 八进制1111000010.011010 — 001 111 000 010 . 011 010 — 1702.32 二进制 — 十六进制1111000010.01101000 — 0011 1100 0010 . 0110 1000 — 3C2.68 八进制 — 二进制251.5O — 010 101 001 . 101 十六进制 — 二进制AE86.1H — 1010 1110 1000 0110 . 0001 1.3 真值和机器数
真值就是我们平常习惯使用的十进制数字机器数就是这些我们惯用的十进制数字在计算机中存储的二进制形式正负号在机器数中是需要被数字化的0代表整数1代表负数。 真值 机器数 15 0 1111 -08 1 1000 二、BCD码
BCD(Binary-Coded Decimal)码就是用二进制编码的十进制他分为3种分别是8421码、余3码和2421码。其中8421码和2421码为有权码余3码为无权码。这三种编码方式都是用4位二进制数字表示1位十进制只不过映射方式不同。
2.1 8421码
8421码与十进制的映射关系如下
0123456789 0000000100100011010001010110011110001001 由于4位二进制可以表示16种状态而十进制只需要10种因此8421码只需要00001001这10种状态即可表示任意单个十进制数字。而10101111这6种状态是不对应任何十进制字符的这就会产生一种情况用两个合法范围的8421编码的数字相加得到的和超出了合法范围如
010110001101显然1101这个编码无法对应任何一个十进制数字。这个时候需要把非法结果0110修正为合法结果。上述结果110101101 0011再将高位补全得到0001 0011这样就可以和表中一一对应。 此处的修正方法为计算机需要使用的方法我们平常计算的时候可以直接用十进制算出结果然后将每一个十进制位对应到8421编码即可。之所以110即6是因为8421码从1010开始就无法对应十进制位此时真值为10再加上6便可以向前进位而保留低位。
2.2 余3码
余3码就是在8421码的基础上每一个编码0011其与十进制映射关系如下
0123456789 0011010001010110011110001001101010111100
2.3 2421码
2421码每一位的权值由高到低依次是2、4、2、1其与十进制映射关系如下
0123456789 0000000100100011010010111100110111101111
在2421码中规定04的编码以0开头59的编码以1开头。若不遵守这个规定则此编码会有歧义。如十进制的5按照2421的权值来看可以有0101和1011两种编码方式这显然是不应该出现的。
三、整数的表示和运算
3.1 无符号整数
3.1.1 无符号整数的表示
无符号整数的表示有如下特征
所有二进制位都是数值位没有符号位第i位的位权是2i−12^{i-1}2i−1n bit无符号整数可表示的范围是02n−102^{n}-102n−1超过这个范围则会发生溢出可以表示的最小数字是全0可以表示的最大数字是全1
3.1.2 无符号整数的运算
无符号整数的加法运算只需要从最低位开始按位相加向高处进位。而无符号整数的减法运算 需要先将减法转换为加法然后按照加法规则相加即可。这样做一方面是因为加法运算的电路简单且成本低另一方面可以让计算机用同样的方法处理运算计算机擅长做重复的事情。 如A-B需要将其转化为等价的加法形式A(-B)此处的-B不是前者B的相反数而是通过将减数B全部位按位取反末位1这个规则得到的。 A:99 — 01100011 B:09 — 00001001 计算A-B先将“B”转换为“-B”:00001001 (按位取反)— 11110110 (末位1)— 11110111 0 1 1 0 0 0 1 1 1 1 1 1 0 1 1 1 ———————— 1 0 1 0 1 1 0 1 0 90 舍去高位的1bit得到结果01011010即90 3.2 有符号整数
3.2.1 有符号整数的表示
有符号数可以用原码、反码、补码和移码表示其中移码只能表示整数。原码就是通过真值直接转换为二进制所得到的只不过最高位是符号位且符号位不能参与运算。用原码进行计算不方便而补码可以很方便地进行运算所以实际运算用的都是补码。 正数的原反补码是一样的。 负数的反码需要将其原码的数值位按位取反符号位保持不变负数的补码需要在其反码的末位1,这个过程同样适用于补码转原码。虽然负数的原反补码是通过变化得来的但是它们的最高位即符号位不会发生变化都能够正确的表示正负。 对于负数来说有一种快捷的从原码转变为补码的方式从右往左找到第一个“1”将这个“1”左边的所有数值位按位取反符号位不变就可以直接得到该原码的补码。同样也可以由此方法将补码转换为原码。
n1 bit合法表示范围最大的数最小的数真值0的表示带符号整数原码−(2n−1)⩽x⩽2n−1-(2^{n}-1)\leqslant x\leqslant 2^{n}-1−(2n−1)⩽x⩽2n−10,111...1112n−10,111...111 2^{n}-10,111...1112n−11,111...111−(2n−1)1,111...111 -(2^{n}-1)1,111...111−(2n−1)[0]原0,000...000[0]_{原}0,000...000[0]原0,000...000[−0]原1,000...000[-0]_{原}1,000...000[−0]原1,000...000带符号整数反码−(2n−1)⩽x⩽2n−1-(2^{n}-1)\leqslant x\leqslant 2^{n}-1−(2n−1)⩽x⩽2n−10,111...1112n−10,111...111 2^{n}-10,111...1112n−11,111...111−(2n−1)1,111...111 -(2^{n}-1)1,111...111−(2n−1)[0]反0,000...000[0]_{反}0,000...000[0]反0,000...000[−0]反1,111...111[-0]_{反}1,111...111[−0]反1,111...111带符号整数补码−2n⩽x⩽2n−1-2^{n}\leqslant x\leqslant 2^{n}-1−2n⩽x⩽2n−10,111...1112n−10,111...111 2^{n}-10,111...1112n−11,000...000−2n1,000...000 -2^{n}1,000...000−2n[0]补0,000...000[0]_{补}0,000...000[0]补0,000...000真值0只有一种补码带符号整数移码−2n⩽x⩽2n−1-2^{n}\leqslant x\leqslant 2^{n}-1−2n⩽x⩽2n−11,111...1112n−11,111...111 2^{n}-11,111...1112n−10,000...000−2n0,000...000 -2^{n}0,000...000−2n[0]移1,000...000[0]_{移}1,000...000[0]移1,000...000真值0只有一种移码无符号整数0⩽x⩽2n1−10\leqslant x\leqslant 2^{n1}-10⩽x⩽2n1−11111...1112n1−11111...111 2^{n1}-11111...1112n1−10000...00000000...000 00000...0000[0]移1,000...000[0]_{移}1,000...000[0]移1,000...000
原码和反码的合法表示范围完全相同真值0都有2种形式 补码和移码的合法表示范围完全相同比原码多表示一个负数真值0只有1种形式。
8bit的机器数用不同的方式解读的结果如图所示。可以看出移码和无符号数的机器数的绝对值越大其真值就越大。 不同码之间的转化如图所示
3.2.2 有符号整数的补码运算
补码的加法运算按位相加即可向高位进位符号位参与运算。 A:19 — 0,0010011 原码 B: -19 — 1,0010011 原码 计算AB 直接使用原码运算 0 0 0 1 0 0 1 1 1 0 0 1 0 0 1 1 ———————— 1 0 1 0 0 1 1 0 166 显然这个结果是错误的。 A:19 — 0,0010011 (原码) — 0,0010011(补码) B: -19 — 1,0010011 (原码) — 1,1101101(补码) 使用补码运算 0 0 0 1 0 0 1 1 1 1 1 0 1 1 0 1 ———————— 1 0 0 0 0 0 0 0 0 0 最高位溢出保留低8位得到了正确的结果0。 和无符号整数的减法一样补码的减法运算也需要将减法转换为等价的加法也就是将减数B的补码转换为-B的补码。转换规则和无符号整数B转换为-B的方法一样将[B]补[B]_{补}[B]补全部位按位取反后1即可得到[−B]补[-B]_{补}[−B]补。 从[B]补[B]_{补}[B]补转换到[−B]补[-B]_{补}[−B]补也有一种简单的算法找到[B]补[B]_{补}[B]补最右边的“1”将这个“1”左边的全部位按位取反即可得到[−B]补[-B]_{补}[−B]补。注意与前边负数的原码补码转换方法区别 A:19 — 0,0010011(原码) — 0,0010011(补码) B: -19 — 1,0010011(原码) — 1,1101101(补码) 计算A-B首先转换为A(-B) [−B]补00010011[-B]_{补}00010011[−B]补00010011 计算A(-B) 0 0 0 1 0 0 1 1 0 0 0 1 0 0 1 1 ———————— 0 0 1 0 0 1 1 0 38 四、定点小数的表示和运算
定点整数可以用原码、反码、补码和移码表示定点小数可以用原反补码表示而不能用移码表示。 定点是指小数点的位置固定不变。在定点整数中我们默认小数点在最低位的后边在定点小数中我们默认小数点在符号位和数值最高位之间。因此若需要位数扩展时两者的扩展位置是不一样的定点整数在高位扩展定点小数在低位扩展。 定点小数三种码之间的转换和定点整数三种码之间的转换是完全一致的运算方法也与定点整数完全一致加减法需要先转换为补码减法要先转换为加法这个转换也和定点整数是一样的。
n1 bit合法表示范围最大的数最小的数真值0的表示定点整数原码−(2n−1)⩽x⩽2n−1-(2^{n}-1)\leqslant x\leqslant 2^{n}-1−(2n−1)⩽x⩽2n−10,111...1112n−10,111...111 2^{n}-10,111...1112n−11,111...111−(2n−1)1,111...111 -(2^{n}-1)1,111...111−(2n−1)[0]原0,000...000[0]_{原}0,000...000[0]原0,000...000[−0]原1,000...000[-0]_{原}1,000...000[−0]原1,000...000定点整数反码−(2n−1)⩽x⩽2n−1-(2^{n}-1)\leqslant x\leqslant 2^{n}-1−(2n−1)⩽x⩽2n−10,111...1112n−10,111...111 2^{n}-10,111...1112n−11,111...111−(2n−1)1,111...111 -(2^{n}-1)1,111...111−(2n−1)[0]反0,000...000[0]_{反}0,000...000[0]反0,000...000[−0]反1,111...111[-0]_{反}1,111...111[−0]反1,111...111定点整数补码−2n⩽x⩽2n−1-2^{n}\leqslant x\leqslant 2^{n}-1−2n⩽x⩽2n−10,111...1112n−10,111...111 2^{n}-10,111...1112n−11,000...000−2n1,000...000 -2^{n}1,000...000−2n[0]补0,000...000[0]_{补}0,000...000[0]补0,000...000真值0只有一种补码定点小数原码−(1−2−n)⩽x⩽1−2−n-(1-2^{-n})\leqslant x\leqslant 1-2^{-n}−(1−2−n)⩽x⩽1−2−n0.111...1111−2−n0.111...111 1-2^{-n}0.111...1111−2−n1.111...111−(1−2−n)1.111...111 -(1-2^{-n})1.111...111−(1−2−n)[0]原0.000...000[0]_{原}0.000...000[0]原0.000...000[−0]原1.000...000[-0]_{原}1.000...000[−0]原1.000...000定点小数反码−(1−2−n)⩽x⩽1−2−n-(1-2^{-n})\leqslant x\leqslant 1-2^{-n}−(1−2−n)⩽x⩽1−2−n0.111...1111−2−n0.111...111 1-2^{-n}0.111...1111−2−n1.111...111−(1−2−n)1.111...111 -(1-2^{-n})1.111...111−(1−2−n)[0]反0.000...000[0]_{反}0.000...000[0]反0.000...000[−0]反1.111...111[-0]_{反}1.111...111[−0]反1.111...111定点小数补码−1⩽x⩽1−2−n-1\leqslant x\leqslant 1-2^{-n}−1⩽x⩽1−2−n0.111...1111−2−n0.111...111 1-2^{-n}0.111...1111−2−n1.000...000−11.000...000 -11.000...000−1[0]补0,000...000[0]_{补}0,000...000[0]补0,000...000真值0只有一种补码