人們日常使用和熟悉的是十進位制,當使用計算機來處理資料時,在計算機外部看到的資料也基本上是十進位制形式。那麼十進位制數在計算機上有幾種表示方式?
二進位制補碼表示:這是一種最常見的表示形式,主要用於數值的計算。
ascii 碼字元對應的0~9
數字,這種方式將數字和字元進行了連線。
採用二進位制編碼的十進位制數(bcd編碼):以最簡單的方式轉為 2 進製,讓機器識別。
bcd 編碼是採用二進位制編碼的十進位制數。這個概念一聽就很繞,但其實理解起來很簡單。
bcd 編碼主要分為兩大類:
有權 bcd 編碼:指十進位制數的每位都由 4 個二進位制位來表示,並且這 4 個二進位制位的每位都有特定的權值。例如最常用的一種編碼8421 編碼
。
故 16 可表示為 0001 0110
無權 bcd 編碼:指表示十進位制數每一位的4個二進位制位沒有特定的權,其與十進位制能對應上是由人為規定的。例如四位典型格雷碼:
西文由拉丁字母,數字,識別符號以及一些特殊符號組成。字元不能直接在計算機內部進行處理,因而必須對其進行數位化編碼。字符集有多種,每乙個字符集的編碼方式也多種多樣,目前計算機中使用最廣泛的西文字符集及其編碼是 ascii 碼。
奇偶校驗:
為了能檢測和糾正記憶體軟錯誤,我們需要一套方案來實現。
記憶體中最小的單位是位元,每 8 個位元作為乙個位元組。不帶奇偶校驗的記憶體中每個位元組有 8 位。如果其某一位儲存了錯誤的值,就會導致其儲存的相應資料發生變化。而奇偶校驗就是在每一位元組(8位)之外又增加了一位作為錯誤校驗位。
奇偶校驗位是兩種型別:
計算機要對漢字資訊進行處理,就必須就漢字本身進行編碼,但漢字的總數超過 6 萬,數量巨大。為了適應漢字系統各組成部分對漢字資訊處理的不同需要,漢字系統必須處理一下集中漢字**:輸入碼,內碼,字模點陣碼。
輸入碼鍵盤是面向西文設計的,乙個或兩個西文字元對應乙個按鍵。由於漢字字數多,無法使每個漢字與西文鍵盤上的乙個鍵相對應,因此必須使每個漢字用乙個或幾個鍵來表示。這種對每個漢字用相應的按鍵進行的編碼表示就稱為漢字的「輸入碼」,又稱「外碼」。
內碼漢字被輸入到計算機內部後,就按照一種稱為「內碼」的編碼形式在系統中進行儲存,查詢,傳送等處理。對於西文字元,他的內碼就是 ascii 碼。
為了適應計算機處理漢字資訊的需要,1981 年我國頒布了《資訊交換用漢字編碼字符集·基本集》(gb2312-80)。該標準選出 6737 個常用漢字,為每個漢字規定了標準**,以供漢字資訊在不同計算機系統之間交換使用。這個標準稱為國標碼,又稱為國標交換碼。
字模點陣碼
經過計算機處理後的漢字,如果需要在螢幕上顯示或印表機列印,則必須把漢字內碼轉換稱人們可以閱讀的方塊形式。
每乙個漢字的字形都必須預先存放在計算機內,一套漢字的所有字元的形狀描述資訊集合在一起稱為字形資訊庫,不同的字型對應著不同的字型檔。在輸出每乙個漢字時,計算機都要先到字型檔中去找到它的字形描述資訊,然後把字形資訊送到相應的裝置輸出。
漢字的字形主要有兩個描述方法:字模點陣描述和輪廓描述。
二進位制資料的每一位是組成二進位制資訊的最小單位,稱為位元(bit)。但二進位制資訊的計量單位是位元組(byte),1byte = 8bit。
在考察計算機效能時,乙個很重要的指標就是機器的字長。字長是指 cpu 內部用於整數運算的資料通路的寬度。cpu 內部資料通路是指 cpu 內部的資料流經的路徑以及路徑上的部件,主要時 cpu 內部進行運算的運算器尾數和通用暫存器寬度。
平時所說的「某種機器是 16 位機」,其中的 16 位就是指字長。
任何資訊在計算機中用二進位制編碼後,得到的都是一串 0/1 序列,每 8 位構成乙個位元組,不同的資料型別具有不同的位元組寬度。一般用最低有效位和最高有效位來分別表示數的最低位和最高位。對於帶符號數,最高位是符號位。
現代計算機基本上都採用位元組編址方式,即對儲存空間的儲存單元進行編號時,每個位址編號中存放乙個位元組。計算機中許多態別資料由許多個位元組組成。例如:int 和 float 型資料占用 4 位元組,而程式中對每個資料只給定乙個位址。例如,在乙個按位元組編制的計算機中,假定 int 型變數i
的位址為0800h
,i
的機器數為01234567h
,這 4 個位元組01h
,23h
,45h
,67h
應該各有乙個儲存位址,那麼,位址0800h
對應 4 個位元組中的哪個位元組?這就是位元組排列順序問題。
按位運算的乙個重要運用就是實現掩碼
操作,通過與給定的乙個位模式進行按位與,可以提取所需要的位,然後可以對這些位進行「置1」,「置0」,「是否為1測試」,「是否為0測試」等,這裡的位模式被稱為掩碼
。例如表示式0x0f & 0x8c
的運算結果為0000 1100
,即0x0c
。這裡通過掩碼0x0f
提取了乙個位元組0x8c
的底四位。
移位操作有邏輯移位
和算術移位
兩種。
位擴充套件:在進行資料型別轉換時,如果乙個短數向長數轉換時,就要進行位擴充套件運算。進行位擴充套件後,數值應該保持不變。位擴充套件有兩種方式:
位截斷:發生在長數轉換位短數時,只要是擷取長度的底 n 位。位截斷可能會使數值發生變換。
在程式設計時通常把指標,位址等作為無符號整數,因而在進行指標或位址運算時需要進行無符號的加減運算。而其他情況下,通常都是帶符號整數運算。無符號整數和帶符號整數的加減運算電路完全一樣。且由於有符號整數在機器中是用補碼進行表示,故減法操作可以用加法來進行運算。
即:1 - 2 = 1 + (-2) =0x0001
+0xfffe
=0xffff
= -1(假設資料都為 short 型)
在進行整數運算時,其通用暫存器中的標誌暫存器也隨之存放相應的資訊。如:
兩個浮點數加減需要經歷一下步驟:
對階:對階的目的是使兩數的階相等,以便尾數可以相加減。對階的原則是:小階向大階看齊,即階小的那個數的尾數右移。(有乙個數的尾數表示會越小,可能在右移時會超出尾數的位數,導致溢位)
尾數加減:對階後兩個浮點數的階相等,此時可以把對階後的尾數相加減。
尾數規格化:
尾數的捨入處理:在對階和尾數右規時,可能會對尾數進行右移,為保證運算精度,一般將低位溢位的位保留下來,並讓其參與中間過程的運算,最後再將運算結果進行捨入。捨入的方式有:
階碼溢位判斷:在進行尾數規格化和尾數捨入時,可能會對結果的階碼執行+1
或-1
操作。因此必須考慮結果的階溢位問題。
第二章資訊的處理和表示 2 整數表示
用位來表示整數有兩種不同的方式 1.表示非負數 2.表示負數 零 正數 引入一些數學術語 整型資料型別 c語言支援多種整型資料型別 表示有限範圍的數。每種型別都能用關鍵字來指定其大小,這些關鍵字 包括char short long,同時還可以指示被表示的數字是非負數 宣告為unsigned 或者可能...
第二章 資訊的表示和處理(一)
一 1 當構造儲存和處理資訊的機器時,二進位制值工作得更好。二值訊號能夠容易地被表示 儲存和傳輸。2 位組 編碼非負數 標準字元碼 文件中字母和符號編碼 3 無符號編碼 傳統的二進位制,表示大於零或者等於零的數字 補碼編碼 有符號整數,可以為正也可以為負 浮點數 表示實數的科學計數法的以2未基數的版...
CSAPP筆記 第二章資訊的表示和處理
python 中十六進製制的轉變方法 a 15 print hex a print 0xf 大端法 ibm 和sun microsystems printf 2x 解析 摘自k r c程式語言 點號,用語分隔字段寬度和精度 表示精度的數。對於字串,它指定列印的字元的最大個數 對於e e或f轉換,它指...