数电基础---进制表示及转换

当你准备好的时候,死神是不会到来的。哈撒韦。

本文主要介绍进制的表示以及不同进制之间的转换。

常用的进制

十进制

十进制是日常生活和工作中最常用的进位计数制。在十进制中每一位有 0~9 十个数码,计数的基数是10。超过9的数必须用多位数表示,中低位和相邻高位的关系是“逢十进一”。

对于任意一个十进制数\(D\)可以表示为

\[D = \sum{k_i \times 10^{i}} \]

式中\(k_i\)是第\(i\)位的系数,取值可以是\(0\sim 9\)中的任意一个。如果整数部分的位数是\(n\),小数部分的位数是\(m\),则\(i\)包含从\(n-1\)\(0\)的所有正整数和从\(-1\)\(-m\)的所有负整数。

举个例子:

\[143.75 = 1 \times 10^2 + 4 \times 10^1 + 3 \times 10^0 + 7 \times 10^{-1} + 5 \times 10^{-2} \]

十进制有的时候用\(D(Decimal)\)下标或者下标\((\cdot)_{10}\)来表示。

二进制

目前在数字电路中应用最广泛的是二进制。二进制数中,每一位仅有和两个可能的数码,所以计数基数为。低位和相邻高位间的进位关系是“逢二进一”。

对于任意一个二进制数\(D\)来说,可以用十进制表示为

\[D = \sum{k_i \times 2^i} \]

式中\(k_i\)是第\(i\)位的系数,取值只能是\(0\)\(1\)。如果整数部分的位数是\(n\),小数部分的位数是\(m\),则\(i\)包含从\(n-1\)\(0\)的所有正整数和从\(-1\)\(-m\)的所有负整数。

举个例子:

\[(101.11)_2 = 1 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 + 1 \times 2^{-1} + 1 \times 2^{-2} = (5.75)_{10} \]

二进制有的时候用下标\(B(Binary)\)或者下标\((.)_{2}\)来表示。

八进制

八进制中,数字的每一位有\(0 \sim 7\)八个不同的数码,计数的基数为\(8\)。低位和相邻的高位之间的进位关系是”逢八进一“。

任意一个八进制数可以按十进制数展开为

\[D = \sum{k_i \times 8^i} \]

式中\(k_i\)是第\(i\)位的系数,取值可以是\(0 \sim 7\)中的任意一个。如果整数部分的位数是\(n\),小数部分的位数是\(m\),则\(i\)包含从\(n-1\)\(0\)的所有正整数和从\(-1\)\(-m\)的所有负整数。

举个例子:

\[(12.4)_8 = 1 \times 8^1 + 2 \times 8^0 + 4 \times 8^{-1}=(10.5)_{10} \]

八进制有的时候用\(O(Octal)\)下标或者下标\((.)_{8}\)来表示。

十六进制

十六进制数的每一位有十六个不同的数码,分别用\(0 \sim 9\),\(A(10)\),\(B(11)\),\(C(12)\),\(D(13)\),\(E(14)\),\(F(15)\)表示,计数的基数是\(16\)。低位和相邻的高位之间的进位关系是"逢十六进一"。

任意一个十六进制数可以按照十六进制数展开为

\[D = \sum{k_i \times 16^i} \]

例如:

\[(2A.7F)_{16} = 2 \times 16^1 + 10(A) \times 16^0 + 7\times 16^{-1}+ 15(F) \times 16^{-2}=(42.4960937)_{10} \]

十六进制有的时候用下标\(H(Hexadecimal)\)或者下标\((.)_{16}\)来表示。

十六进制数在计算机中应用广泛。目前在计算机中普遍采用8位,16位和,,32位二进制并行运算,而8位,16位和32位二进制数可以用2位,4位和8位的十六进制数表示,因而用十六进制符号书写程序非常简便。

进制之间的转换

二进制转十进制,八进制转十进制,十六进制转十进制

对于二进制,八进制,十六进制转成十进制,就像上面公式里那样,各位按十进制加权求和就可以转换成。

\[D = \sum{k_i \times N ^i} \]

\(N\)指的是进制数,也被称为计数的基数,当二进制时,\(N=2\),当八进制时,\(N=8\),当十六进制时,\(N=16\)\(k_i\)是第\(i\)位的系数,\(N_i\)称为第\(i\)位的权。

比如对于二进制数\((1011.01)_2\)来说,将各项的数值按十进制数相加

\[(1011.01)_2 = 1\times 2^3 + 0\times 2^2 + 1\times 2^1 + 1\times 2^0 + 0\times 2^{-1}+ 1 \times2 ^{-2} \\=(11.25)_{10} \]


十进制转二进制

十进制转二进制从整数部分转换和小数部分转换两个部分讨论。

整数部分

假定十进制整数为\((S)_{10}\),等值的二进制数为\((k_nk_{n-1}k_{n-2}\cdots k_0)\),根据二进制数展开为十进制数的公式可以得到

\[(S)_{10} = k_n 2^n + k_{n-1} 2^{n-1} + \cdots +k_1 2^1 +k_0 2^0 \\=2(k_n 2^{n-1} + k_{n-1}2^{n-2} + \cdots +k_1) +k_0 \]

如果将\((S)_{10}\)除以\(2\),则得到的商为\(k_n 2^{n-1} + k_{n-1}2^{n-2} + \cdots +k_1\),余数为\(k_0\)

同样的道理,除于\(2\)得到的商也可以写成

\[k_n 2^{n-1} + k_{n-1}2^{n-2} + \cdots +k_1 = 2(k_n 2^{n-2} + k_{n-1} 2^{n-3} + \cdots +k_2) + k_1 \]

则如果将\((S)_{10}\)除以得到的商再次除以\(2\),则所得余数即\(k_1\)。以此类推,如果反复将除于2后得到的商再次除于2,就可以得到转换后的二进制数的每一位。

以下以\((173)_{10}\)转化为二进制数作为例子
image

所以\((173)_{10} = (10101101)_2\)

注意:从上面的过程中可以看出,最先得到的余数是\(k_0\),即转换后二进制数的最低位,所以在进行上面除二操作时,要将余数进行倒序排列。

小数部分

假设\((S)_{10}\)是一个十进制的小数,对应的二进制小数为\((0.k_{-1}k_{-2}\cdots k_{-m})_2\),则按照二进制展开成十进制的公式可以写成

\[(S)_{10} = k_{-1}2^{-1} +k_{-2}2^{-2}+\cdots+k_{-m}2^{-m} \]

将上式两边同时乘上2可以得到

\[2(S)_{10} = k_{-1} +(k_{-2}2^{-1} + k_{-3}2^{-2}+\cdots + k_{-m}2^{-m+1}) \]

上式说明将小数\((S)_{10}\)乘以2所得乘积的整数部分为\(k_{-1}\)
即乘积的整数部分是\(k_{-2}\)

以此类推,将每次乘2后所得乘积的小数部分再乘以2,便可求出转换后二进制小数的每一位。

\((0.8125)_{10}\)化成二进制小数为例
image

所以\((0.8125)_{10} = (0.1101)_2\)

注意:第一次乘2操作得到的整数是\(k_{-1}\),即转换后二进制小数的最高位,所以在进行十进制小数转换为二进制小数的时候,乘二后的整数部分正序排列。


二进制与八进制

二进制转八进制

在将二进制数转换为八进制数时,只要将二进制数的整数部分从低位到高位每三位分成一组并代之以等值的八进制数就可以。二进制数最高一组不足3位或者小数部分最低一组不足3位时,仍需用0补足3位。

image

八进制转二进制

如果将八进制数转换为二进制数,则只要将八进制数的每一位代之以等价的二进制数即可。
image


二进制与十六进制

二进制转十六进制

由于4位二进制数恰好有16个状态,而把这4位二进制数看作一个整体时,它的进位输出有正好是逢十六进一,所以只要从低位到高位将整数部分每4位二进制数分成一组并代之以等值的十六进制数,同时从高位到低位将小数部分的每位数分成一组并代之以等值的十六进制数,即可得到对应的十六进制数。

注意:如果二进制数整数部分最高一组不足4位时,用0不足4位,如果小数部分最低一组不足4位时,也需用0补足4位。
image

十六进制转二进制

转换时只需将十六进制数的每一位用等值的4位二进制数代替即可。
image

十六进制转十进制

十六进制转十进制只需要按照公式展开即可,十进制转十六进制,可以先将十进制转成二进制,再将二进制转成十六进制。

posted @ 2021-10-13 23:42  孤独野猪骑士  阅读(1538)  评论(0编辑  收藏  举报