概述
文章目录
- 2. 不同数制之间的转换
- 2.1. 十进制和二进制之间的转换
- 2.2.二进制转八进制/十六进制
- 2.3.八进制/十六进制转二进制
- 2.4 二进制数转8421BCD码
- 3. 二进制数的计算
- 3.1.加减乘除
- 3.2.反码和补码
- 3.2.1反码,补码的求法
- 3.2.2.关于符号的问题
- 3.2.3.补码的意义
2. 不同数制之间的转换
2.1. 十进制和二进制之间的转换
- 方法一:除2取余法
- 方法二:这个方法非常快捷,它的思路来源于二进制转化十进制的过程:
比如说有一个二进制数 ( k n k n − 1 ⋯ k 0 . k − 1 k − 2 ⋯ k − m ) 2 (k_nk_{n-1}cdots k_0.k_{-1}k_{-2}cdots k_{-m})_2 (knkn−1⋯k0.k−1k−2⋯k−m)2 那么,它转化为十进制数的方式如下: k n ∗ 2 n + k n − 1 ∗ 2 n − 1 + ⋯ + k 0 ∗ 1 + k − 1 ∗ 2 − 1 + k − 2 ∗ 2 − 2 + ⋯ + k − m ∗ 2 − m k_n * 2^n + k_{n-1} * 2^{n-1} + cdots + k_0 * 1 + k_{-1} * 2^{-1} + k_{-2} * 2^{-2} + cdots + k_{-m} * 2^{-m} kn∗2n+kn−1∗2n−1+⋯+k0∗1+k−1∗2−1+k−2∗2−2+⋯+k−m∗2−m
对于这个式子,反过来,如果我们想要把十进制转化为二进制,就是要确定这些 k n , k n − 1 , ⋯ k 0 , k − 1 , k − 2 , ⋯ k − m k_n, k_{n-1}, cdots k_0, k_{-1}, k_{-2}, cdots k_{-m} kn,kn−1,⋯k0,k−1,k−2,⋯k−m
因此,我们下面举一个例子,加入要转化为八位二进制的十进制数是83
s t e p 1 step 1 step1:先将二进制数八位的权重都写出来,如下: 128 64 32 16 8 4 2 1 128 quad64 quad32 quad16quad 8quad 4 quad2quad 1 1286432168421
s t e p 2 step2 step2:现在,我们要做的就是找到权重里面比83小的最大整数,OK,是64对吧,因此我们可以确定这个位置应该是1,我们做下标记: 128 64 32 16 8 4 2 1 0 1 128 quad64 quad32 quad16quad 8quad 4 quad2quad 1\ 0 quad quad1 quad quad quad quad quad quad quad quad quad quad 128643216842101
s t e p 3 step3 step3:用83 - 64,得到19,同样的,在剩余的权值里面找到比19小的最大整数,是16,因此,16对应的位置应该也是1,继续标记: 128 64 32 16 8 4 2 1 0 1 0 1 128 quad64 quad32 quad16quad 8quad 4 quad2quad 1\ 0thinspacethinspacequad1thinspacethinspacequad0thinspacethinspacequadthinspace1thinspacethinspacethinspacequadthinspacethinspacethinspacequadthinspacethinspacethinspacequadthinspacethinspacethinspacequad 12864321684210101
s t e p 4 step4 step4:重复上述步骤,最终我们得到的二进制数就是: 0 1 0 1 0 0 1 1 0quad1quad0quad1quad0quad0quad1quad1 01010011
2.2.二进制转八进制/十六进制
对于二进制转八进制而言,我们先把二进制数的整数部分从右到左,小数部分从左到右,每三位二进制数为一组划分(整数部分最高位一组不足3个时用0补,小数部分最低为不足3为时用0补),然后,分别对于每一组二进制数,直接把它们转化为十进制数即可
下面举一个例子:将
(
011110.010111
)
2
(011110.010111)_2
(011110.010111)2转化为八进制数
s
t
e
p
1
step1
step1:先分组
011
⏡
110
⏡
.
010
⏡
111
⏡
undergroup{011}thinspaceundergroup{110}.undergroup{010}thinspaceundergroup{111}
011
110.
010
111
s
t
e
p
2
step2
step2:接着,对于每一组,求出它们表示的十进制数即可,例如011那组表示的十进制数就是:
0
∗
2
2
+
1
∗
2
1
+
1
∗
2
0
=
3
0 * 2^2 + 1 * 2^1 + 1 * 2^0 = 3
0∗22+1∗21+1∗20=3
因此,最终求出来的数字就是36.27
二进制转十六进制和二进制转八进制的方法一样,只不过这一次的分组是4位二进制数位一组
2.3.八进制/十六进制转二进制
这个其实也不难,先拿八进制转二进制来讲,一位八进制数对应转化为三位二进制数,举一个例子,将八进制数:
(
52.43
)
8
(52.43)_8
(52.43)8转化位二进制数
s
t
e
p
1
step1
step1:将八进制数的每一位转化为二进制数(直接用十进制转二进制的方法即可)
比如5转化为:
(
101
)
2
(101)_2
(101)2,2转化为
(
010
)
2
(010)_2
(010)2,4转化为
(
100
)
2
(100)_2
(100)2,3转化为
(
011
)
2
(011)_2
(011)2
那么,最后得到的二进制数就是:
(
101010.100011
)
2
(101010.100011)_2
(101010.100011)2
十六进制转二进制方法一样,只不过一位十六进制数对应转化为4为二进制数而已
2.4 二进制数转8421BCD码
8421BCD码是一种有权码,四位二进制数xxxx,从高位到低位的权重依次是8,4,2,1
那么,二进制数怎么转8421BCD码呢?
我们可以先将二进制数转成十进制数,在把十进制数的每一个位转成对应的8421BCD码
例子:将
(
1101.1
)
2
(1101.1)_2
(1101.1)2转成8421BCD码:
首先将1101.2转成十进制:是
(
13.5
)
10
(13.5)_{10}
(13.5)10,那么我们就看13.5每一位对应的8421BCD码是啥:
1的8421码是0001,3的8421码是0011,5的8421码是0101,那么最终转化为8421BCD码就是:
(
00010011.0101
)
2
(00010011.0101)_2
(00010011.0101)2
3. 二进制数的计算
3.1.加减乘除
这部分难度不大,它和十进制数的加减乘除非常类似,只不过二进制数的计算是逢2进1
3.2.反码和补码
二进制中,我们通常在二进制数的前面增加一个符号位来表达二进制数的正负,0表示正,1表示负
3.2.1反码,补码的求法
对于一个正的二进制数来说,它的原码 = 反码 = 补码
而对于负的二进制数,反码求法:符号位不变,数值位按取反
举个例子,对于二进制数:10011010,它的反码就是:11100101
对于负的二进制数,补码求法:反码+1(符号位不变)
还是刚刚的例子,它的补码位:11100110
3.2.2.关于符号的问题
当两个补码相加时,结果的符号位等于:原来加数的符号位之和 + 来自最高为有效数字的进位
我们来看个例子:1. 用二进制补码计算:13 - 10
s
t
e
p
1
step1
step1:13的补码为:00001101,-10的补码为11110110
s
t
e
p
2
step2
step2:相加:
(
0
)
0
0
0
1
1
0
1
(
1
)
1
1
1
0
1
1
0
<
1
>
{
1
}
0
0
0
0
0
1
1
begin{array}{cccccccc} (0) && 0 & 0 & 0 &1 & 1 & 0 & 1\ (1) && 1&1 & 1 &0&1&1&0\ hline <1>& {1}&0&0&0&0&0&1&1 end{array}
(0)(1)<1>{1}010010010100110011101
其中,<1>表示原来两个补码符号位的和,{1}表示来自最高为有效数字的进位
因此,两个补码加和结果的符号位就是1 + 1 = 0,也就是正数
3.2.3.补码的意义
两个原码相减还是挺麻烦的,要比较两数的绝对值大小,选出大的那个当作被减数,再相减
而引入反码和补码,就是为了使用加法代替上述过程的减法
最后
以上就是等待小甜瓜为你收集整理的【数字电子技术 Digital Electronic Technology 1】——数制和码制 之 不同数制的转换以及二进制算术运算2. 不同数制之间的转换3. 二进制数的计算的全部内容,希望文章能够帮你解决【数字电子技术 Digital Electronic Technology 1】——数制和码制 之 不同数制的转换以及二进制算术运算2. 不同数制之间的转换3. 二进制数的计算所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复