定点数的编码表示方法
文章目錄
- 1 無符號表示法
- 1.1 無符號表示法的特點
- 1.2 無符號表示法的存儲步驟
- 2 符號加絕對值表示法(即原碼,Sign and Magnitude)
- 2.1 符號加絕對值表示法的特點
- 2.2 符號加絕對值表示法的存儲步驟
- 2.3 符號加絕對值表示法的缺點
- 3 補碼表示法(模運算,modular運算)
- 3.1 補碼表示法的基本概念
- 3.2 如何取補碼
- 3.3 補碼表示法的存儲步驟
- 3.4 補碼表示法恢復原數的方式
- 4 移碼表示法(Excess biased notion)
- 4.1 移碼表示法的概念
- 4.2 移碼表示法的操作方式
- 4.3 移碼表示法的優點
1 無符號表示法
1.1 無符號表示法的特點
無符號表示法只能用于存儲無符號整數,也就是正整數。
1.2 無符號表示法的存儲步驟
無符號表示法存儲步驟如下:
舉例:
復原就是存儲步驟的逆運算。
2 符號加絕對值表示法(即原碼,Sign and Magnitude)
2.1 符號加絕對值表示法的特點
在存儲整數中并不常用,卻通常用于存儲模擬信號(存儲音頻的部分會用到)。
正號用0表示,負號用1表示,數值部分不變。
2.2 符號加絕對值表示法的存儲步驟
符號加絕對值表示法的步驟如下:
舉例:
復原就是存儲步驟的逆運算。
2.3 符號加絕對值表示法的缺點
符號加絕對值表示法雖然容易,但是具有如下缺點:
- 0的表示不唯一,故不利于程序員編程。
- 加、減運算方式不統一。
- 需額外對符號位進行處理,故不利于硬件設計。
- 特別當a < b時,實現a - b比較困難。
從50年代開始,整數都采用補碼表示法,但浮點數的尾數用原碼定點小數表示。
3 補碼表示法(模運算,modular運算)
3.1 補碼表示法的基本概念
重要概念: 在一個模運算系統中,一個數與它除以“模”后得余數等價。
現實世界中的模運算系統:時鐘是一種模12系統。
我們可以得出如下結論:
這樣通過補碼(modular運算),我們就實現了+和-的統一。
補碼的定義: 假設補碼有n位,則[X]補 = 2 ^ n + X (-2 ^ (n-1) <= X < 2 ^ (n-1), mod 2 ^ n)。
3.2 如何取補碼
取補碼主要有如下兩種方法:
取反加1:
通過如下的計算我們可以很清晰的看出為什么是取反加1:
從右邊開始復制,直到復制第一個1然后其他位取反:
注: 將一個數連續取兩次補碼,最終得到原數。
求特殊數的補碼:
3.3 補碼表示法的存儲步驟
無符號表示法的存儲步驟如下:
舉例:
3.4 補碼表示法恢復原數的方式
理論做法:
實際上我們都是如果如下形式進行求補碼的真值的:
規律:判斷正負
- 轉換結果的最高位是0,則被轉換的數為正數,數值部分相同。
- 轉換結果的最高位是1,則被轉換的數為負數,數值各位取反,末位加1。
舉例:
4 移碼表示法(Excess biased notion)
4.1 移碼表示法的概念
移碼表示是指將每一個數值加上一個偏置常數(Excess/bias)。
4.2 移碼表示法的操作方式
通常,當編碼位數為n時,bias取2^(n-1)
或 2^(n-1) - 1(如IEEE754)。
(上圖應該是當bias為2^(n-1) 時)
4.3 移碼表示法的優點
使用移碼表示法,便于浮點數加減時的對階操作(比較大小)。
參考資料:
總結
以上是生活随笔為你收集整理的定点数的编码表示方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++中的构造函数
- 下一篇: C#中的构造方法与对象初始化器