源碼/反碼/補碼/BCD碼/ascll碼自我總結

源碼/反碼/補碼/BCD碼/ascll碼自我總結

由於今年專業課開設了《微機原理》和《數據結構》這兩門比較重要的課程。再加上最近兩天本人正在回頭惡補c語言,發現了在c語言中會用各種碼制,所以今天呢,本着總結鞏固,並自我提高的態度(其實是順便完成每週一篇總結性博客的自我目標233 )來對所學習的知識做一個劃分聯繫,希望以後能借此形成自己的知識體系。

二進制與三種碼制的關係

二進制

計算機遵循的是馮諾依曼體系,其中特別重要的一點就是釆用2進制計數法。其原因是引文計算機是由邏輯電路組成的,電路中通常只有兩個狀態,開關的接通和斷開,這兩種狀態正好可用“1”和“0”表示。計算機在表示數的時候,會使用以下兩種狀態。開關切斷狀態,開關連通狀態。剛好通過這兩種電信號的狀態來對事物進行(通過算法進行)“是”和“不是”(既“非”)的準確判斷(只存在是/非這兩種判斷)以“1“爲真(是)以“0”爲假(非)。剛好對應二進制只存在0和1這兩個數的 特徵

源碼

衆所周知 c語言中存在有符號數和無符號數這兩種類型的數據。
有符號數;字最高位爲符號位,可以表示的有效數字相比無符號數來說少了這一個符號位就少了2倍(這個說法可能不準確,這是我個人認爲的,如有錯誤希望能指出 )其中,正數的最高位符號位爲0,負數的最高位符號位爲1。
無符號數; 整個字的所有符號都可以用來表示數,最高位不是符號位,但是隻能表示正數0-255 2^8=256 256個數即爲從0-255
舉例;以32位操作系統下的int爲例
有符號數;-123的二進制數源碼爲 1000 0000 0000 0111 1011
無符號數;123的二進制數源碼爲 0000 0000 0000 0111 1011

反碼

有符號數最高位爲符號位,無符號數沒有符號位。 反碼即爲將該數的二進制碼,除開符號位以外,其餘各位依次按位取反。反碼會造成+0/-0問題,這一點會在補碼中進行解決(+0;00000000
-0;10000000 這兩個數都表示0)
例如
-123 反碼 1111 1111 1111 1000 01 00 123反碼 1111 1111 1111 1000 0100
源碼 1000 0000 0000 0111 1011 123源碼 0000 0000 0000 0111 1011

補碼

計算機內進行數值運算時,都是按照二進制的補碼形式計算的。原因在於

  1. 可加法代替減法運算,[a-b]補 = [a]補+[-b]補
    簡體了計算機運算硬件電路,提高運算效率:
  2. 統一了正0和負0
    原碼及反碼的正0、負0有不同的表示,補碼的0是唯一的,
    例如字長8位,補碼的0表示爲唯一的00000000。這時10000000這個數就是多餘的,我們將其規定爲-128!暨-128的補碼是10000000

模的概念可以幫助理解補數和補碼。

以鐘錶爲例子
鐘錶能表示的最大數位11時59分59秒。當該時間+1s時,我們在個體認知上是主觀將其人爲是1點的。同時,由於世界採用24小時制。我們習慣將最大數認爲是23h59m59s
但是鐘錶上表盤的客觀劃分是在11.59.59+1s過後歸零。這一點與二進制數進位然後該位歸零是相同的道理。以此類推,8進制的摸是八最大數是7,16進制的摸是16,最大數是15等等

以鐘錶爲例子。
例如:假設當前時針指向10點,而準確時間是6點,調整時間可有以下兩種撥法:
一種是倒撥4小時,即:10-4=6;
另一種是順撥8小時:10+8=12+6=6
我們會發現這兩種撥發的最後結果是相同的,最後指針都在6處。以此拓展,
因此凡是減法運算,都可以用加法來代替。暨要減去一個數,可以該數該數和他所對應的摸得差。例如八進制下 7-5=7+(8-5)=7+3=8+2=2

補碼,源碼,反碼轉換


我被老師說這麼多年寫字難看是有原因的
變補是將所有位全部取反(有符號位的話包括符號位)然後載+1
(上圖變補少寫了+1)

ASCll碼

ascll本質是一種映射表 ascll碼錶有0-255個
其中0-127爲基礎表128-255位擴展表
ascii(american standard code for information interchange,美國信息互換標準代碼)
是基於拉丁字母的一套電腦編碼系統。它主要用於顯示現代英語和其他西歐語言。它是現今最通用的單字節編碼系統。
在計算機中,所有的數據在存儲和運算時都要使用二進制數表示(因爲計算機用高電平和低電平分別表示1和0)。例如,象a、b、c、d這樣的52個字母(包括大寫)、以及0、1等數字還有一些常用的符號(例如*、#、@等)在計算機中存儲時也要使用二進制數來表示。而具體用哪些二進制數字表示哪個符號,當然每個人都可以約定自己的一套(這就叫編碼),而大家如果要想互相通信而不造成混亂,那麼大家就必須使用相同的編碼規則,
於是美國有關的標準化組織就出臺了所謂的ascii編碼,統一規定了上述常用符號用哪些二進制數來表示

BCD碼

BCD碼(Binary-Coded Decimal‎)亦稱二進碼十進數或二-十進制代碼。用4位二進制數來表示1位十進制數中的0~9這10個數碼。是一種二進制的數字編碼形式,用二進制編碼的十進制代碼。BCD碼這種編碼形式利用了四個位元來儲存一個十進制的數碼,使二進制和十進制之間的轉換得以快捷的進行。(摘自搜狗百科)
BCD碼主要分爲8421 5421 2421三種碼制。BCD碼只能用4位2進制數字表示0-9,暨0000-1001.但是已知4位二進制數字能表示0-15這16個數。所以在講二進制碼以每四位數字分組後每一組表示一個數字,數字的先後順序代表10進制中的權重大小。其中最主要的一個問題就是,當4位二進制數表示的數字大於9時如何顯示!。因爲BCD碼只能表示到9,二進制碼最大隻能表示到15.所以當4位二進制碼大於9時,我們需要對其加0110(對應的十進制爲6)使其進位。
(關於bcd碼這一點過段時間我會再進行多次手動計算,希望過兩天我能附上我的計算過程。)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章