程式員應該瞭解的電腦知識(二)——數制系統

來源:互聯網
上載者:User

引言

眾所周知,電腦系統使用的是位元制系統,其所能識別的機器碼和指令代碼都是用的是由0和1組成的序列。而日常生活中我們使用的都是十進位數制系統,電腦為什麼只能使用二進位系統,這與其組成結構有關,我們知道電腦內部都是電子元件組成,而電子元件的狀態例如:通電和斷電等)往往有相對的兩面性,使用二進位更容易解釋其電子元件的狀態和特徵。

提到數制系統,那麼何為數制系統?日常生活中大多使用什麼數制系統?位元制系統又是怎麼回事兒?且看下文分解。

數制系統

關於數制系統純粹是一種數學理論,這裡筆者使用一種小學數學的方式來簡單介紹一下。

1.關於數制系統

數制是用一種固定的符號和統一的規則來表示數值的方法,就是一種計數的規則。常見的數值系統有二進位、八進位、十進位、十六進位等。其中電腦使用的是位元制系統,現實生活中常用的是十進位數制系統。其實有一點瞭解的可以看出它們都是使用一種進位的方式進行計數,例如二進位逢二進一,十進位逢十進一,這種方式稱為進位制,也成為進位記數法,是一種計數方式,可以使用有限的數字記號表示所有的數值。可使用的數字記號的數目稱為基數或者底數,基數為n,即可稱n進位制,也可稱為n進位。

對於數制系統而言,常使用數位、基數、位權和因子等術語進行描述。

數位是數制中表示基本數值大小的不同數字記號。例如十進位有十個數位,分別為0、1、2、3、4、5、6、7、8、9;二進位則有兩個數位,分別是0和1。

基數,也稱底數,是數制中使用數位的個數。通常情況下使用基數來定義數制系統。例如十進位的基數為10,稱為十進位數制系統,二進位的基數為2,稱為位元制系統。

位權是數位在不同位置上的倍率值,即數制中某一位上的1所表示的數值的大小所處位置的價值)。例如:十進位中的123,1的位權為100,2的位權為10,3的位權為1;二進位中10,1的位權為2,0的位權為1。對於一個n進位的數值,整數部分第i位以小數點為原點向左)的位權為n的i-1次方,即n(i-1),而小數部分為第j位以小數點為原點向右)的位權為n的-j次方,即n(-j)。所在的n表示從小數點為原點,向兩邊衍生。)十進位的2…5.0…5分析如下…表示省略數字)

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/162FW3b-0.png" title="位權" width="500" height="182" border="0" hspace="0" vspace="0" style="width:500px;height:182px;" alt="215219425.png" />

其實每一位元碼所表示的數值大小等於該數位本身乘以位權。例如在十進位中可以使用個位、十位、百位、千位、萬位…,十分位、百分位、千分位、萬分位…來表示位權,個位就是100,十位就是101,…十分位就是10-1。

因子是一種倍數關係,如果整數n除以m,結果是無餘數的整數,那麼就稱m是n的因子,n是m的倍數。只有當被除數、除數、商均為整數,餘數為零才成立。

經過上面的介紹,可以簡單的整理一下數值系統中數值的表示方法。對於一個i位整數,j位小數的n進位數值可以使用加權係數展開式表示為:

K=(AiAi-1…A2A1.A1A2…Aj-1Aj)n

=Ai×ni-1+Ai-1×ni-2+…+A2×n1+A1×n0+.+A1×n-1+A2×n-2+…+Aj-1×n-(j-1)+Aj×n-j

其中i表示整數位元,其為從小數點左邊第一位開始計算,依次為i=1,i=2,…;j表示小數位元,其為從小數點右邊第一位開始計算,依次為j=1,j=2,…;A表示該進位數中的數位值;Ai表示整數部分的第i位元碼值,例如i=1,則表示小數點左邊第一位元碼;Aj表示小數部分的第j位元碼值,例如j=1,則表示小數點右邊第一位元碼;n為底數。

2.常見數制系統介紹
  • 二進位

二進位Binary)是以2為基數,0、1為數位的進位系統,縮寫為B或者BIN。二進位是由兩個基本數字0和1組成,計算特點是“逢二進一”,“借一當二”。位元制系統常用於電腦等電子裝置中資料的傳輸或儲存,因為二進位中只有兩個字元0和1,可以表示元器件的不同穩定點;二進位的運算簡單。

  • 八進位

八進位Octal)是以8為基數,0、1、2、3、4、5、6、7為數位的進位系統,縮寫為O或者OCT。八進位的計算特點是“逢八進一”,“借一當八”。八位元制系統常用於電腦的計算中,適用於12位、36位等或其它位元為3的倍數的電腦系統。

  • 十進位

十進位Decimal)是以10為基數,0、1、2、3、4、5、6、7、8、9為數位的數制系統。十進位的計算特點是“逢十進一”,“借一當十”。十進位是最常用的數制系統。

  • 十六進位

十六進位Hex)是以16為基數,0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F為數位的進位系統,縮寫為H或者HEX。十六進位的計算特點是“逢十六進一”,“借一當十六”。十六進位數制系統常用於電腦進階程式設計語言中,常用於對大資料的表示。

對於各個進位的運算這裡不做多的介紹,記住“逢N進一”或者“借一當N”即可。只需要瞭解其加法和加法運算即可,其他的運算均可分解為加減法運算進行。

3.數制系統之間的相互轉換

數制系統之間的相互轉換或許是一個重點。但是也純粹的是數學知識,不懂的話就好好的學學數學。這裡簡單的歸納一下常用的方法。具體的例子省略,請自行安裝規則演練。)

3.1.低進位轉高進位

對於任意一個n進位的數值轉換為m進位m>n)的數值時可以使用按權求和法,即將n進位的數值按n進位位權展開後,按照m進位的加法規則進位求和,等到的結果就該n進位數值使用m進位表示的數值。轉換方法

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/162FU2C-1.png" title="低進位轉高進位" width="500" height="119" border="0" hspace="0" vspace="0" style="width:500px;height:119px;" alt="223605281.png" />

該種方法適用於低進位轉換為高進位數值,圖中m必須是大於n的整數。使用算術運算式可將該方法表示為:

(AiA(i-1)…A2A1.A1A2…Aj-1Aj)n=Ai×ni-1+Ai-1×ni-2+…+A2×n1+A1×n0+.+A1×n-1+A2×n-2+…+Aj-1×n-(j-1)+Aj×n-j=(…)m

3.2.高進位轉低進位

對於任意一個n進位的數值轉換為m進位m<n,)的數值時可以先將n進位的數值轉換為十進位數值表示的形式,然後將十進位結果數值再轉換為m進位數值。十進位的數值轉換為任意m進位的數值時可以採用基數除乘法,需要將整數部分和小數部分分開轉換,整數部分使用基數除法即除m取餘法),小數部分使用基礎乘法乘m取整法),然後將取得的結果按照規律合并起來。

1.基數除法除m取餘法)——類似於短除法,即使用m去除十進位整數部分,一直到商為零時結束,將每一步得到的餘數按反方向排列,則得到整數部分的m進位表示形式。看下面的運算式提取除以m)的思路:

(K)10=m0×(Ai×mi-1+Ai-1×mi-2+…+A2×m1+A1×m0)

=m1×(Ai×mi-2+Ai-1×mi-3+…+A2×m0)+A1

=m2×(Ai×mi-3+Ai-1×mi-4+…+A3×m0)+A2+A1

……

=mi-1×(Ai×m0)+Ai-1+…+A2+A1

=Ai+Ai-1+…+A2+A1

這隻是一個類比過程,每一步都除以一個m提取一個m)得到餘數Ai,將餘下的整數進行拼接。運算式中“+”表示拼接符號。

2.基數乘法乘m取整法)——即使用m去乘十進位小數部分,一直到乘積沒有小數即小數部分為零或者出現迴圈體或者得到要求的精度位置)時結束,將每一步得到的乘積的整數部分按正方向排列,則得到小數部分的m進位表示形式。看下面的運算式乘以m的思路:

(K)10=m0×(A1×m-1+A2×m-2+…+Aj-1×m-(j-1)+Aj×m-j)

=A1+m1×(A2×m-1+…+Aj-1×m-(j-1)+1+Aj×m-j+1)

=A1+A2+m2×(A3×m-1+…+Aj-1×m-(j-1)+2+Aj×m-j+2)

……

=A1+A2+…+Aj-1+mj-1×(Aj×m0)

=A1+A2+…+Aj-1+Aj+mj×1

……

這隻是一個類比過程,每一步都乘以一個m提取一個m)得到整數結果Aj,積的小數部分則繼續參與計算,最後將得到的整數進行拼接。運算式中“+”表示拼接符號。

關於n進位轉換為m進位m<n)的轉換方法

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/162FS095-2.png" title="高進位轉低進位" width="500" height="467" border="0" hspace="0" vspace="0" style="width:500px;height:467px;" alt="233416964.png" />

該種方法適用於高進位轉換為低進位數值,圖中m必須是小於n的整數。

3.3.特殊方法介紹

關於n進位的數值與nKK為正整數)進位的數值之間的轉換,它們之間存在冪次方)的關係,可以使用特殊的劃位方法進行快速轉換。設m=nK,則n與m的關係為nK=m1,則n與m之間存在為的對應關係,即n中的K位對應m中的1位。

對於nKK為正整數)進位的數值轉換為n進位的數值時,可以直接將nKK為正整數)進位數值中的每一位轉換為n進位對應的數值,轉換過程實質是使用以n為除數,每一位為被除數的除乘法運算,得到每一位對應n進位的K位結果,最後將結果串連起來就是nKK為正整數)進位數值對應的n進位數值。

對於n進位的數值轉換為nKK為正整數)進位的數值時,可以對n進位的數值進行K位劃分,具體劃分規則分為小數部分和整數部分:整數部分——從小數點左邊第一位開始算,每數K位進行劃分,直到左邊不足K位左邊補零直到滿足K位)或者剛好為K位結束。然後將劃分的每K位轉換為nK進位的數值,轉換過程實質是使用每K位按n進位進行位權展開,然後按nK進位的加法規則進行求和得到每位對應的nK進位的數值,將得到每一位結果從左至右串連起來則為nKK為正整數)進位數值的整數部分。小數部分——從小數點右邊第一位開始算,每數K位進行劃分,直到右邊不足K位右邊補零直到滿足K位)或者剛好為K位結束。然後將劃分的每K位不包含小數點)轉換為nK進位的數值,轉換過程實質是使用每K位按n進位進行位權展開,然後按nK進位的加法規則進行求和得到每位對應的nK進位的數值,將得到每一位結果從左至右串連起來則為nKK為正整數)進位數值的小數部分。最後將得到的結果通過小數點串連起來。可以用來表示這個過程:

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/162FSN1-3.png" title="倍數進位轉換" width="500" height="342" border="0" hspace="0" vspace="0" style="width:500px;height:342px;" alt="234159691.png" />

該方法只適合具有n進位的數值與nKK為正整數)進位的數值之間的轉換。

電腦中數制系統——二進位

二進位系統是以0和1為數位,2為基數的數制系統。電腦採用的就是位元制系統,由於位元制系統只儲存0和1兩個數位,可以明確的表示電子元件的兩種狀態,而且二進位的運算簡單,即可算術運算也可以進行邏輯運算。在電腦中使用位元碼序列和數位來表示其不同的數值,同一個數位在不同的數位上或同一個數位上不同的數位可以表示不同的數值。

1.二進位的運算

在電腦中,位元制系統支援兩種運算方式:算術運算和邏輯運算。算術運算包括加減乘除法運算,邏輯運算包括與或非等運算。在算術運算中遵循“逢二進一,借一當二”的原則;而邏輯運算是類比電路元件的運算,主要用於二進位位碼的比較上。

1.1.算術運算
  • 加法法則:0+0=0;0+1=1+0=0;1+1=10進位)

  • 減法法則:0-0=0;10-1=1借位);1-0=1;1-1=0

  • 乘法法則:0×0=0;0×1=1×0=0;1×1=0

  • 除法法則:0÷1=1;1÷1=0

1.2.邏輯運算
  • 邏輯非NOT)運算使用符號“ˉ”表示,在運算元上加上該符號表示對該數的各位進行邏輯非運算。規則如下:650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/162FV2Q-4.png" title="非0.png" width="28" height="16" border="0" hspace="0" vspace="0" style="width:28px;height:16px;" alt="235131120.png" />;650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/162FR0b-5.png" title="非1.png" width="28" height="16" border="0" hspace="0" vspace="0" style="width:28px;height:16px;" alt="235235243.png" />。即非0為1,非1為0。

  • 邏輯與AND)運算又稱為邏輯乘運算,使用符號“×”或“·”或“∧”表示,在兩個運算元之間使用該符號表示對當前兩個運算元的各位進行邏輯與運算。規則如下:0∧0=0;0∧1=0;1∧0=0;1∧1=1有點像乘法運算)。即當運算元有一個為0時則結果為0;同時為1時則結果為1。

  • 邏輯或OR)運算又稱為邏輯加運算,使用符號“+”或“∨”表示,在兩個運算元之間使用該符號表示當前兩個運算元的各位進行邏輯或運算。規則如下:0∨0=0;0∨1=1;1∨0=1;1∨1=1有點像加法運算)。即到運算元有一個為1則結果為1;同時為0則結果為0。

  • 邏輯異或XOR)運算使用符號“-∨”表示,在第一個運算元前加上“-”符號,第二個運算元前加上“∨”表示對當前兩個運算元的各位進行邏輯異或運算。規則如下:-0∨0=0;-0∨1=1;-1∨0=1;-1∨1=0有點想減法運算)。即當運算元運算的相同時結果為0,不同時結果為1。

或許你會發現,對應任意一個位元二進位序列)來說,如果末尾右邊第一位)的數位為1則該位元表示的是奇數,可以被2n-1整除;如果末尾右邊第一位)的數位為0則該位元表示的是偶數,可以被2n整除;將一個位元左移一位右邊補0)的結果是該數的2倍,即該數乘以2的結果;將一個無符號的數右移一位左邊補0)的結果是概述的1/2倍,即該數除以2的結果。這個特點是一種演算法的體現,具體不做多個解釋)

2.二進位的轉換2.1.二進位與十進位的轉換

1.二進位轉換為十進位

將位元值按位權進行展開並按十進位的進行求和運算,得到的結果即使十進位的數值。整數部分的冪為正,小數部分的冪為負。

2.十進位轉換為二進位

將十進位數值的整數部分進行基數除法運算,即除以2,記下得到的餘數作為位元值的最低位;得到的商如果不是0則繼續除以2,記下得到的餘數……;依次做除法直到得到的商為0停止,組合每一次除法的餘數即是位元值的整數部分。將十進位數值的小數部分進行基數乘法運算,即乘以2,繼續得到結果的整數部分作為位元值的最高位;得到的積如果還包含小數沒有達到指定的精確度)則用該小數部分繼續乘以2,記下得到結果的整數部分……;依次做乘法直到得到的積不包含小數部分或達到指定的精度)停止,組合每一次乘法結果的整數部分即為位元值的小數部分。最後以小數點進行拼接即可。

2.2.二進位與其它進位的轉換

二進位與其他進位的轉換可以藉助十進位為橋樑,先將位元值轉換為對應的十進位數值,然後再將十進位數值轉換為對應的數制系統的數值。或者先將其他進位數值轉換為對應的十進位數值,然後再將十進位數值轉換為對應的位元值。

二進位轉換為2KK為正整數)進位可以使用位劃分法進位轉換,以位元值中的小數點為原點,分別將整數部分和小數部分按K位進行劃分,不足K位可以補0;然後再將每一個K位轉換成一個2K進位的數值按二進位進行位權展開,按2K進位進行求和運算);最後將每一位元字按順序進行串連即得到對應的2K進位的數值。2KK為正整數)進位轉換為二進位時可以使用按位轉換法進行轉換,將2K進位的每一位轉換為K位的位元值使用以2為基數的基數除法進行轉換),然後將得到的數值按順序串連起來即為對應的位元值。

附錄:二進位、八進位、十進位、十六進位數值轉換對照表
二進位 八進位 十進位 十六進位
0000 00 0 0
0001 01 1 1
0010 02 2 2
0011 03 3 3
0100 04 4 4
0101 05 5 5
0110 06 6 6
0111 07 7 7
1000 10 8 8
1001 11 9 9
1010 12 10 A 或 a
1011 13 11 B 或 b
1100 14 12 C 或 c
1101 15 13 D 或 d
1110 16 14 E 或 e
1111 17 15 F 或 f
10000 20 16 10
總結

數制系統的一種相對性的概念,而且任何一種數制系統都有其獨到的用處。生活中都是用的標準的十進位,而如果要入行IT,至少要對二進位有所瞭解,如果要進軍編程必須要對八進位、十六進位有所瞭解。本文中略有提到規則,其只是數位個數不同、位權不同而已,可使用位權求和法將低進位數值轉換為高進位數值;使用基數乘除法將高進位數值轉換為低進位數值,其實這都是數學概念。電腦使用的是二進位,相對比較簡單。

再說後話,本篇的內容或許對大多數的人來說都是“班門弄斧”,筆者是半道入行IT的,對高數、電腦基礎都瞭解甚少不明說,你懂得),這裡筆者想用一種通俗的方式來表述個人總結的知識。所以希望大家不要見笑,多多噴墨……

本文出自 “阿酷呆” 部落格,請務必保留此出處http://akudy.blog.51cto.com/2277883/1298406

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.