一、數的表示與運算
- 有符號數和無符號數統稱爲機器數
1.爲什麼現在用浮點數而不用定點數?
答:
- 編程時需要確定小數點位置
- 難以表示兩個大小相差較大的數
- 存儲空間利用率低(eg:0.00000005 - 1000000000,花費很大的空間去存儲0)
定點數:小數位固定不變的數
浮點數:小數位數可以隨意改變的數
- 階碼和尾數都可以正負
- 引入規格化浮點數是爲了讓每一個小數有唯一的表示方法。(0.35*10^2 == 35 == 3.5 *10,一個數有無數中表示方法)
- 規格化浮點數:3.5*10
2.無符號數
3.有符號數
- 有符號數,無符號數只有程序員知道,計算機硬件無法識別
- 需要判斷符號是相同還是相反;若是兩個數相減,得先判斷哪個絕對值大,然後最終符號位跟上,(這個操作需要花時間)
- -4和8互爲補數
- 乘法相當於是移位和加法的結合,除法是移位和減法的運算
- 加減乘除都變成了加法+移位->硬件更加的便宜
- FDH爲-3(1000_0011)的補碼(1111_1101)
4.數字0的原碼,補碼,反碼問題
- 溢出了,解決了0問題
5.特殊數字(eg:10000000)
- 原碼=符號位+絕對值
- 反碼:符號位是不變的,求它真實表示的值,需要對它再次取反,即1111_1111=-2^7-1
- 補碼這是規定,沒有原理
6.數的表示範圍
- 有符號數的最小值爲1000_0000 = -128
7.溢出判斷
-
異或:相同爲0不同爲1
-
乘法運算沒有溢出問題(2個8位相乘結果爲16位;2個16位相乘,結果爲32位)
-
這是兩個有符號數的前提下
-
若是2個無符號數,那麼沒有溢出(最高位沒有向外溢出)
二、邏輯門
-
與非門支持多值輸入,即所有爲1->結果爲0
-
或非門,有一個1->結果爲0
-
運用上面的與非110;或非001秒殺
-
同或異或門都是兩輸入單輸出的
-
例1用與非或者或非都可以,但是與非門更好一些(要求全一才輸出0;而或非門有一個0就輸出0)
-
例2用或門好(全0輸出0)