Day 7 - 数学是不是会击垮一个人的信心? 会

简介

上一篇介绍了如何利用2进位来表示10进位的数字,这次则要再进阶的介绍一下4、8、16进位。在下一篇会讲解一下这些进位在电脑里面是怎麽被运用的。


4进位

4进位顾名思义,就是每当数字到4的时候就要进一位。

例如:

【4 进位】

10进位 4进位 可以想成
21 0 111 1 * 16 + 1 * 4 + 1 * 1
64 1 000 64 ( 4的3次方 )
15 0 033 3 * 4 + 3 * 1
81 1 101 1 * 64 + 1 * 16 + 1 * 1

8进位

8 进位其实也就是当数字到 8 的时候就要进位。7 → 8 要进位;63 → 64 要进位;511 → 512要进位,以此类推。

例如:

【8 进位】

10进位 4进位 可以想成
21 025 2 * 8 + 5 * 1 ( 8 ^ 0)
64 100 1 * 64
15 017 1 * 8 + 7 * 1
81 121 1 * 64 + 2 * 8 + 1 * 1

16进位

8 进位其实也就是当数字到 8 的时候就要进位。15 → 16 要进位;255 → 256 要进位,以此类推。

但是要注意的是,在16进位里面数字会这样表示:

16进位 : 0 1 2 3 4 5 6 7 8 9 10 A  B  C  D  E

对应到 : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

例如:

【16 进位】

10进位 4进位 可以想成
21 015 1 * 16 + 5 * 1
64 040 4 * 16
15 00E 15 * 1
81 051 5 * 16 + 1 * 1
512 200 2 * 16^2 (256)

可以看到在16 进位中15会被表示成 E 。


为什麽要用4、8、16进位

这是因为在2进位中,如果今天要存入一个很大的数字,就只能用一大串数字来储存,但是4进位或甚至16进位可以在更少的数列中储存更多的资讯。

可以举一个例子:

如果今天要在电脑里面存入一个数字 9987

我们可以把这个数字拆解成

8192(2^13) + 1024(2^10) + 512(2^9) + 256(2^8) + 2(2^1) + 1(2^0)

如果以二进位来记录的话会长成这样:

010 0111 0000 0011

如果把它改成8进位会长怎样呢?

可以把数字拆成:

2 * 4096(8^4) + 3 * 512(8^3) + 4 * 64(8^2) + 3 * 1(8^0)

所以以8进位表示会变成:

23403

会节省了很多的时间!


10 - 2 - 8 - 16的互换

那今天如果要直接换算一个数字,然後把它换成其他的进位制,总不可能像上面一样要先因式分解,再一个一个的算吧!

其实有一个方式,可以换算10进位与其他进位


10进位与其他进位

用短除法除想要的数字 例如:

要把(58)10进位 变成2进位

就可以把

58 / 2 = 29 mod 0

29 / 2 = 14 mod 1

14 / 2 = 7 mod 0

7 / 2 = 3 mod 1

3 / 2 = 1 mod 1

1 / 2 = 1 mod 1

就可以把它写成 : 111010

你看,是不是很轻松!


2-8-16进位的互换

如果今天要把2进位换成8或是16进位呢?

这时候只要使出画线大法就好了。

例如:

2进位:10111010011

要换成8进位的话,就要从最小的开始,每三个画一条线:

2进位:10 111 010 011

这时候就可以把对应到2进位的值换成8进位的值,就会变成:

8进位:2  7   2   3  

那如果是要换算成16进位的话,就要改成四个画一条线:

2进位:101 1101 0011

16进位 : 5   D    3    

这样就完成了!

那如果要换回来,就是把16进位换成每四个一组的2进位:

16进位: A    5    4   

2进位 : 1010 0101 0100 

这样就可以换回来了!


小结

这些进位制有时候会搞倒我,因为我的数学实在不太行:(

但我还是进我的全力来搞懂他们,另外还有一些补数的部分,其实我还不是很了解,大家有空的话可以看看杰哥的文章,他写的hen好!


参考资料

  1. https://www.itread01.com/content/1550376565.html
  2. https://www.footmark.info/introduction-to-computer/digital-system-conversion/
  3. https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/HyOUUA8RO (杰哥的文章!)

<<:  Day19 - GitLab CI 上传 Image 到 Google Container Registry

>>:  Day4 - 2D渲染环境基础篇 I - 成为Canvas Ninja ~ 理解2D渲染的精髓

Day25-你的资料安全吗(三)

前言 因为资料库基本上可以分成 SQL 跟 NoSQL 两大类,昨天讲完 SQL injection...

什麽是 Webhook Signature

What and Why 在串接对方 webhooks 时通常会看到文件上提到 signature「...

Day02 WebRTC 简介

一场全球大流行的 COVID-19 疫情,以及 H264、H265、VP8、VP9等影音压缩技术加...

数位签章(digital signature)

-数位签章 使用您的私钥加密代码的指纹或对代码进行散列并使用您的私钥加密结果是生成数字签名的 改写...

Day 25 强度与深度

天空中飘荡着各式各样的风筝,它们颤颤悠悠,互比高低,都在向着蓝天,向着白云,向着未来展翅飞翔。 《i...