機器數與真值
一、 機器數及其編碼
機器數就是數值在計算機中的表示形式,真值則是它在現實中的實際數值。可以這樣簡單的理解。因為計算機只能直接識別和處理用0、1兩種狀態的二進位制形式的資料,所以在計算機中無法按人們的日常書寫習慣用正、負符號加絕對值來表示數值,而與數字一樣採用二進位制**0和1來表示正、負號。
這樣在計算機中表示帶符號的數值資料時,符號和數均採用了0、1進行了**化。這種採用二進位制表示形式,連同正負符號一起**化的資料,稱為機器數或者機器碼(即,數值在計算機中的二進位制表示形式)。與機器數對應,用正、負符號加絕對值來表示的實際數值稱為真值。
根據約定機器數是否存在符號位,機器數可以分為無符號數和帶符號數。無符號數是指計算機字長的所有二進位制位均表示數值。帶符號數是指機器數分為符號位和數值兩部分,且均採用二進位制表示。
一般約定最高位表示符號。
例1-1:10011001作為無符號定點整數時,真值是153;作為帶符號定點整數時,第一位是符號位,1代表負號,二進位制數***的真值是-0011001,轉化成十進位制是-25。
對於帶符號數,根據小數點位置固定與否,又可以分為定點數和浮點數。在介紹浮點數之前我們要將注意力完全放在定點數上面,要有點耐心,對定點數的理解程度決定了我們對浮點數的理解程度,因為可以將浮點數看成是對定點數的一種應用,以後就會明白了。好了,先看一看什麼是定點數。
定點數約定所有資料的小數點位置均是相同且固定不變的。計算機中通常使用的定點數有定點小數和定點整數兩類。
定點小數:對於乙個長度為n位的機器數,定點小數約定小數點在符號位和最高數值位之間,如下
數符(最高位,占用1位).尾數(剩餘n-1位)
小數點只是乙個約定,是隱含的,不占用空間。
定點整數:對於乙個長度為n位的機器數,定點整數約定小數點在最低數值位之後,如下
數符(最高位,占用1位)尾數(剩餘n-1位).
小數點也是隱含的。
例1-2:下的八位二進位制數,我們看看它們所代表的值是多少
定點小數:1.1011001真值=-0.1011001=-0.6953125
定點整數:11011001真值=-1011001=-89
真值:127=+1111111定點整數:01111111
真值:-0.125=-0.001定點小數:1.0010000
1、 機器數與真值
機器只認識二進位制數:0、1。
這是因為,電路狀態常有兩個,如通、斷;高電平、低電平;…可用0、1表示。
這種0、1、0、1…1在機器中的表現形式——機器數。一般為8位。
無符號數:00000000b、……11111111b即00h ~ ffh
機器數有:
帶符號數:+1010110b、-1101001真值
01010110、11101001機器數
2、 機器數的編碼及運算
對帶符號數而言,有原碼、反碼、補碼之分,計算機內一般使用補碼。
1) 原碼
將數「數位化」,原數前「+」用0表示,原數前「-」用1表示,數值部分為該數本身,這樣的機器數叫原碼。
設x——原數;則[x]原 = x(x0)
x]原 = 2n-1 – x (x0),n為字長的位數。
如,[+3]原 = 00000011b
[-3]原 = 27 - (-3) = 10000011b
0有兩種表示方法:000000000
100000000
原碼最大、最小的表示:+127、-127
2) 反碼
規定正數的反碼等於原碼;負數的反碼是將原碼的數值位各位取反。
[x]反 = x (x0)
[x]反 =(2n –1)+ x (x0)
如,[+4]反 = [+4]原 = 00000100 b
[-4]反 = (28 –1)+(-4) = 11111111- 00000101 = 11111010 b
反碼範圍:-127 ~ +127
兩個0; +0 —— 00000000 b
-0 —— 11111111 b
3) 補碼
補碼的概念:現在是下午3點,手錶停在12點,可正撥3點,也可倒撥9點。即是說-9的操作可用+3來實現,在12點裡:3、-9互為補碼。
運用補碼可使減法變成加法。
規定:正數的補碼等於原碼。
負數的補碼求法:1)反碼 + 1
2)公式:[x]補 = 2n + x (x<0)
如,設x = - 0101110 b , 則[x]原 = 10101110 b
則[x]補 = [x]反 + 1 = 11010001 + 00000001 = 11010010 b
如,[+6]補 = [+6]原 = 00000110 b
[-6]補 = 28 + (-6) = 10000000 – 00000110 = 11111010 b
8位補碼的範圍 –128 ~ +127。
0 的個數:只乙個,即00000000
而10000000 b是-128的補碼。
原碼、反碼、補碼對照表:表1-2 p10
4)補碼的運算
當x≥0時,[x]補= [x]反=[x]原
[ [x]補]補 = [x]原
[x]補+ [y]補 = [ x+y ]補
[ x-y ]補= [ x+(-y)]補
例:已知 x=52 y=38 求x-y
方法1: 減法方法2: 加法
x-y = 52-38 =14x-y = [ [ x-y]補]補 = [ [x]補+[-y]補]補
0 0 1 1 0 1 0 052]補+[ -38]補]補
-) 0 0 1 0 0 1 1 014 ]補 =14
0 0 0 0 1 1 1 0
52]補: 0 0 1 1 0 1 0 0
38]補:+) 1 1 0 1 1 0 1 0
1 0 0 0 0 1 1 1 0
自然丟失
計算機在做算術運算時,必需檢查溢位,以防止發生錯誤
5)運算的溢位問題
資料字長(位數)有一定限制,所以資料的表示應有乙個範圍。
如字長8位時; 補碼範圍-128~+127
若運算結果超出這個範圍,便溢位。
例: [98]補: 0 1 1 0 0 0 1 0 [85]補: 0 1 0 1 0 1 0 1
[25]補:+)0 0 0 1 1 0 0 1 [47]補:+)0 0 1 0 1 1 1 1
[123]補: 0 1 1 1 1 0 1 1 [132]補: 1 0 0 0 0 1 0 0
未溢位 0 0溢位 0 1
cs+1 cs(未溢位cs+1 cs (溢位)
錯:兩個正數相加和為負數。
[- 85]補: 1 0 1 0 1 0 1 1 [- 19]補: 0 1 0 1 0 1 0 1
[- 47]補:+)1 1 0 1 0 0 0 1 [- 79]補:+)1 0 1 1 0 0 0 1
[- 132]補: 1 0 1 1 1 1 1 0 0 [- 98]補: 1 1 0 0 1 1 1 1 0
溢位 1 0未溢位 1 1
cs+1 cscs+1 cs
錯:兩個負數相加和為正數。
可見:結果正確(無溢位)時,cs+1 = cs
結果錯誤(溢位)時,cs+1 ≠ cs
溢位判斷:溢位 = cs+1cs(即結果是0為無溢位;1為有溢位)
3、 十進位制數的編碼
對機器:二進位制數方便,
對人 :二進位制數不直觀,習慣於十進位制數。
在程式設計過程中,有時需要採用十進位制運算,但機器不認識十進位制數。
怎麼辦?
可以將十進位制的字元用二進位制數進行編碼:
1 00009 1001
2 00011010
2 00101011
3 00111100 未用碼
4 01001101
5 01011110
6 01101111
7 0111
8 1000
這叫做二進位制數對十進位制編碼——bcd碼。
上述每4位二進位制數表示乙個十進位制字元,這4位中各位的權依次是:
8、4、2、1——8421 bcd碼。
bcd碼的運算:
例: 1 80 0 0 1 1 0 0 0
+) 3 bcd碼相加 +) 0 0 0 0 0 0 1 1
2 10 0 0 1 1 0 1 1
3 b非bcd碼(錯)怎麼辦?
需進行十進位制調整:
0 0 0 1 1 0 0 0
+) 0 0 0 0 0 0 1 1
0 0 0 1 1 0 1 1個位大於9,應進1)
0 1 1 0加6使進1)
0 0 1 0 0 0 0 1結果形如出21)
(1)bcd碼加法規則
計算機二級C語言複習
第一部分 c語言知識複習資料 第一章 c語言基本知識 考點1 c程式 用c語言編寫的程式稱為c語言源程式,源程式檔案的字尾名為 c 源程式經編譯後生成字尾名為 obj 的目標檔案,再把目標檔案與各種庫函式連線起來,生成 exe 可執行檔案。c語言有三種基本結構 順序結構 選擇結構 迴圈結構。考點2 ...
公共基礎知識之計算機試題 一
2012 07 06 17 51 作者 甘肅華圖 未知 導讀 公共基礎知識之計算機試題及答案 1.在計算機內部,用來傳送 儲存的資料或指令都是形式進行的。a a 二進位製碼 b 拼音簡碼 c 八進位製碼 d 五筆字體碼 2 計算機能夠直接識別和處理的語言是 c a 組合語言 b 自然語言 c 機器語...
計算機二級考試C語言全
第一章資料結構與演算法 1.1 演算法 1 是指解題方 而完整的描述。換句話說,演算法是對特定問題求解步驟的一種描述。演算法不等於程式,也不等於計算方法。程式的編制不可能優於演算法的設計。2 演算法的基本特徵 1 可行性。針對實際問題而設計的演算法,執行後能夠得到滿意的結果。2 確定性。每一條指令的...