1. 爲何產生ASCII碼?
在計算機中,全部的數據在存儲和運算時都使用二進制數表示(由於計算機用高電平和低電平分別表示1和0),例如,像a、b、c、d這樣的52個字母(包括大寫)、以及0、1等數字還有一些經常使用的符號(例如*、#、@等)在計算機中存儲時也要使用二進制數來表示,而具體用哪些二進制數字表示哪一個符號,互相通訊而不形成混亂,就必須使用相同的編碼規則,因而美國有關的標準化組織就出臺了ASCII編碼,統一規定了上述經常使用符號用哪些二進制數來表示。
包括:10個十進制數碼、52個英文大小寫和必定數量的專用符號(%, @, +等等),總共128個字符。windows
2. 爲何會有大小端模式之分呢?
這是由於在計算機系統中,數據存儲是以字節爲單位的,每一個地址單元都對應着一個字節,一個字節爲8bit。可是在C語言中除了8bit的char以外,還有16bit的short型,32bit的long型(要看具體的編譯器);另外,對於位數大於8位的處理器,例如16位或者32位的處理器,因爲寄存器寬度大於一個字節,那麼必然存在着一個若是將多個字節安排的問題。所以就致使了大端存儲模式和小端存儲模式。二者有相應應用優點,做爲一種規則約定俗稱。編碼
咱們經常使用的X86結構、不少的ARM和DSP是小端模式,而KEIL C51則爲大端模式。有些ARM處理器還能夠由硬件來選擇是大端模式仍是小端模式。
在操做系統中,x86和通常的OS(如windows,FreeBSD,Linux)使用的是小端模式。但好比Mac OS是大端模式。spa
小端模式:低字節存放在低地址
大端模式:高字節存放在低地址操作系統
3. 漢明碼
漢明碼是在電信領域的一種線性調試碼,以發明者理查德·衛斯里·漢明的名字命名。漢明碼在傳輸的消息流中插入驗證碼,以偵測並更正單一比特錯誤。因爲漢明編碼簡單,它們被普遍應用於內存(RAM)。其SECDED版本另外 加入一檢測比特,能夠偵測兩個或如下同時發生的比特錯誤,並可以更正單一比特的錯誤。調試
1、1開始給數字的數據位(從右向左)標上序號, 1,2,3,4,5...;
2、將這些數據位的位置序號轉換爲二進制,1, 10, 11,100, 101,等;
3、數據位的位置序號中全部爲二的冪次方的位(編號1,2,4,8,等,即數據位位置序號的二進制表示中只有一個1)是校驗位;
4、有其它位置的數據位(數據位位置序號的二進制表示中至少2個是1)是數據位; 5、每一位的數據包含在特定的兩個或兩個以上的校驗位中,這些校驗位取決於這些數據位的位置數值的二進制表示。 blog
根據糾錯理論得:L-1=D+C 且D>=C
即編碼最小距離L越大,則其檢驗錯誤的位數D越大,糾正錯誤的位數C也越大內存
設欲檢驗的的二進制代碼爲n位,爲使其具備糾錯能力,需增添k位檢驗位,組成n+k爲的代碼。爲了能準確對錯誤定位以及指出代碼代碼位置,新增添的檢驗位數k應知足:2^k>=n+k+1。編譯器
海明碼計算要按如下步驟來進行:計算校驗碼位數→肯定校驗碼位置→肯定校驗碼
最後每組經過異或邏輯運算(與偶校驗原理同樣),使每組的運算結果爲0,便可得出第 i 位校驗碼的值。it
實現校驗和糾錯
把以上這些校驗碼所校驗的位分紅對應的組,則在接收端的對各校驗位再進行邏輯「異或運算」,若是採用的是偶校驗,正常狀況下均爲0。編譯
步驟:
(1)肯定海明碼的位數
n+k <= 2^k - 1(n位有效信息的位數,k位校驗位的位數)
(2)肯定校驗位的分佈
規定校驗位Pi放在海明位號爲2^i位上,其他信息爲信息位
海明碼的各位分佈以下:
H7 | H6 | H5 | H4 | H3 | H2 | H1 |
D4 | D3 | D2 | P3 | D1 | P2 | P1 |
(3)分組造成校驗關係
被校驗數據位的海明位號等於校驗該數據位的各校驗位海明位號之和。
如D4放在位置H7上,7分解成4+2+1,由這些位的校驗位P三、P二、P1校驗。
(4)校驗位取值
P1由H3,5,7,9,11位的信息位進行異或;
P2由H3,6,7,10,11位的信息位進行異或;
P3由H5,6,7,12,13位的信息位進行異或。
(5)海明碼校驗
S1 = P1 D1 D2 D4異或
S2 = P2 D1 D3 D4異或
S3 = P3 D2 D3 D4異或
S3 S2 S1 = 001,說明H1位出錯,取反便可糾正。