iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 8
0
自我挑戰組

計算機概論X30天系列 第 8

Day8:[計算機概論]十進位和二進位的轉換

閱讀前,建議可以參考Day1:閱讀指南&為何選擇這個題目?

▌挑戰簡介

  • 題目:計算機概論X30天

  • 挑戰內容:連續30天紀錄計算機概論、離散數學、演算法、資料結構等課程,還有自己學習程式的心得體悟。

  • 閱讀指南:

    • 適合任何對程式語言有興趣的人閱讀。
    • 不適合已經會的人,因為太簡單了,你會覺得很弱智(嗚嗚這是初學者的筆記嘛)
    • 不適合沒有基礎的人閱讀,因為怕你覺得寫程式很無聊(其實寫程式不用會10101001也不會死(應該

▌十進位、二進位

電腦的底層世界是10101010101

這有什麼用?

其實我覺得沒什麼用XD。

它可以算是電腦科學的常識吧,但除非要處理很底層的東西,不然不知道怎麼轉換好像也不會怎樣。我初次遇到時,也沒有學會(太笨+覺得「知道這個要幹嘛?」)。純粹是因為課程需求,所以才不得已要知道一下。但如果目地只是寫程式,不學也沒關係。

人生很短,不需要學無用的東西折磨自己

但對我有用,1.因為考試會考,2.還有我可以用來拖時間(XD

如何十進位轉二進位

什麼是「十進位轉二進位」,簡單來說就是把12、21這種數字只用「0和1表達」
網路上有除法,但我比較笨不會用,我的方法如下

  • 觀察2的次方規律

2^0=1
2^1=10
2^2=100
2^3=1000

會發現,2的「次方」如果是n,就代表代表1後面有n幾個零。比如說:
1是「2的0次方」,所以代表1後面有0個零,所以是1
2的「2的1次方」,所以代表1後面有1個零,所以是10
4的「2的2次方」,所以代表1後面有2個零,所以是100
8的「2的3次方」,所以代表1後面有3個零,所以是1000

然後就把十進位的數字,拆成各種2的次方
比如說,14就拆成8(2^3)+4(2^2)+2(2^1)

8=(2^3)=1後面3個零=1000
4=(2^2)=1後面2個零=100
2=(2^1)=1後面1個零=10
因此8+4+2=1000+100+10=1110

所以14換成二進位就是1110

順序就是:

  • 把十進位拆成各種類型2次方的總和
  • 把各種類型的2次方轉換成10的形式(因為很好轉)
  • 然後把這些10的鬼東西加起來

如何二進位轉十進位

什麼是「二進位轉十進位」,簡單來說就是把一堆10100101的鬼東西,轉換成常見的12、20之類的數字。

我的方式如下

比如說看到1010001,首先就猜一下這個數字大概是多少,因為很接近1000000,因此大概可以猜是一個比2^6大~2^7也小(因為1後面有6個零,所以就是2^6),也就是64~128之間。

然後如果真的逼我算出來,就把它拆開。

1010001=1000000+10000+1

1000000=2^6 ==> 64
10000=2^4 ==>16
1=2^0 ==>1

64+16+1=81

因此1010001就是81

順序就是:

  • 掃一下數字是幾位數,猜一下他轉成十位數後大致會落在的範圍。比如說10110是五位數,跟10000(2^4)很接近,因此就知道轉成十位數後大概落在2^4~2^5之間
  • 開始把二位數拆成各種「1後面跟著0」之類的組合。比如說10110拆成10000+100+10
  • 然後把這些「1後面跟著0」之類的組合換成「2的次方」然後加起來。比如說10000是2^4,100是2^2,10是2^1,因此答案是,16+4+2=22,10110就是22。

結論

  • 十進位二進位是計算機科學的常識(Common Sense)
  • 但我覺得不知道不會死:D

上一篇
Day7: [演算法] 用JS實現冒泡排序
下一篇
Day9:[計算機概論]十六進位的實用價值,原來色票是十六進位!
系列文
計算機概論X30天30

尚未有邦友留言

立即登入留言