本文目标
进位制是一种记数方式,利用这种记数方式,人类可以使用有限种数字符号来表示所有的数值。
一种进位制中可以使用的数字符号的数目称为这种进位制的基数或底数,若一个进位制的基数为 n,即可称之为 n 进位制 (即 n 进位)。
现今最常用的进位制是十进位,这种进位制通常使用 10 个阿拉伯数字(即 0-9)进行记数。
-- 修改自维基百科
有了进位制系统,我们可以用不同的基数来表示同一个数值,十进位数字 28 为例:
10 进制 | 2 进位 | 8 进位 | 16 进位 |
---|---|---|---|
28 | 11100 | 34 | 1C |
遇到 2 就进位:
10 进制 | 2 进制 |
---|---|
0 | 000 |
1 | 001 |
2 | 010 |
3 | 011 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
遇到 8 就进位
10 进制 | 8 进制 |
---|---|
0 | 0 |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
8 | 10 |
9 | 11 |
10 | 12 |
在 16 进制系统中,可以使用 0 - 15 来表达数值,不过其中的 10 - 15 本身就已经是进位过後的结果了,所以我们会使用英文字母取代 10 - 15 :
10 进制 | 16 进制 |
---|---|
0 | 0 |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
8 | 8 |
9 | 9 |
10 | A |
11 | B |
12 | C |
13 | D |
14 | E |
15 | F |
16 | 10 |
在 8 进制系统中,1 个位元可以表示 8 种状态,若以二进制系统我们则需要 3 个位元才能够表示 8 种状态。
要将 8 进制转为 2 进制系统也非常简单,只要将 8 进制系统的单一位元转为 2 进制的 3 个位元即可:
34 (8) -> 011 100 -> 11100 (2) -> 28 (10)
在 16 进制系统中,1 个位元可以表示 16 种状态,若以二进制系统我们则需要 4 个位元才能够表示 16 种状态。
要将 16 进制转为 2 进制系统也非常简单,只要将 16 进制系统的单一位元转为 2 进制的 4 个位元即可:
1C (16) -> 0001 1100 -> 11100 (2) -> 28 (10)
以下范例皆以 n = 2 作为示范。
现在考虑小数点的情况,将二进制数 10011.011B 转换成十进制数字:
了解二进制如何转为十进制之後,再来学习十进制转为二进制的技巧:
将二进位数按位元逐个反转,就可以得到的其 1's 补数(ones' complement)。
0001 (+1)
的一补数为 1110 (-1)
。
按照上面的范例,我们一次列举出更多的数字出来:
2 进制 | 无号数 | 有号数 | 一补数 |
---|---|---|---|
0000 | 0 | 0 | 0 |
0001 | 1 | 1 | 1 |
0010 | 2 | 2 | 2 |
0011 | 3 | 3 | 3 |
0100 | 4 | 4 | 4 |
0101 | 5 | 5 | 5 |
0110 | 6 | 6 | 6 |
0111 | 7 | 7 | 7 |
1000 | 8 | -0 | -7 |
1001 | 9 | -1 | -6 |
1010 | 10 | -2 | -5 |
1011 | 11 | -3 | -4 |
1100 | 12 | -4 | -3 |
1101 | 13 | -5 | -2 |
1110 | 14 | -6 | -1 |
1111 | 15 | -7 | -0 |
一补数的特性可使加法电路同时可以运算减法,像是:
0001 (1) + 1100 (-3) = 1101 (-2)
不管事一补数或是有号数的储存方式都会产生 -0
这个结果,为了避免这个问题,电脑科学家又进一步发展出二补数,二补数的计算方式非常简单:
以 -7
为例,我们先将其转为一补数:
1000
接着将一补数 +1 得到二补数:
1001
至於刚刚提到的 MSB 最高位元为负数,其余皆为正数 这两条规则,我们可以用来进行验算:
-8 (MSB) | 4 | 2 | 1 (LSB) |
---|---|---|---|
1 | 0 | 0 | 1 |
(-8)x1 + 4x0 + 2x0 + 1x1 = -7
在学习编写系统程序时,进制间转换与补数系统是必备的基本技能之一,现今的电脑多采用二进制系统 + 二补数系统来储存资料,所以在学习进阶技巧之前才会特别规划一篇文章供读者复习,希望能够帮助到大家。
昨天介绍了各种选择器,今天介绍伪类及伪元素样式设定,可以让画面有更多的样式变化,也减少html co...
在 Day 25 介绍 React Profiler 的文章中有提到 React Developer...
Chatbot integration- Face Login- 人脸登入 这边要做的事情不是用人脸...
全彩 LED 光线变化 ( 共阳极 ) 教学原文参考:全彩 LED 光线变化 ( 共阳极 ) 全彩 ...
Counting sort Input : Output : Aux(auxiliary) arra...