定點數定點純整數的表示
反碼:signed
補碼:signed
移碼:signed
有符號補碼和無符號數相互轉換
定點純整數的擴充套件
定點純整數的截斷
定點整數運算
二進位制乘法:signed
二進位制除法:signed
浮點數乘除法
tips
這裡對下文會用到的幾個溢位名詞作解析
機器中的小數很少用定點純小數表示,一般用ieee 754標準的浮點數表示法進行表示
注意 求和符號的上下界,定點純整數的原碼表示和定點純小數不同原碼相加結果
原碼相加需要分離符號位補碼相加結果
原碼常用於表示浮點數階碼移碼相加結果
[x+y]移碼 = [x]移碼+[y]補碼理解原碼需要區分符號位和數值位才能進行正確的乘除運算;反碼、移碼、補碼都不能直接進行乘除運算。
對於全體整數,原碼和反碼有兩種編碼(+0,-0),移碼和補碼有唯一編碼
加減法中只討論加法。
處於區分在真值視角下的運算和在二進位制視角下的運算。
三位有符號數的範圍是-4 ~ 3,無符號數的範圍是0 ~ 7由於7對於有符號數是上溢,故需要−2w
-2^w
−2w,-9對於有符號數是下溢,故需要+2w
+2^w
+2w
單符號位法
變形補碼法
若是unsigned的二進位制乘法,則相當於兩者的符號位都是0,且原碼輸入和補碼輸入是相同的(因為正數的原碼 = 補碼),故unsigned的二進位制乘法相當於原碼並行乘法原碼並行乘法
補碼並行乘法
unsigned是無符號位、原碼的signed的二進位制除法的特殊形式對於乘除而言,補碼的數值位都不能直接參與運算,故在運算前都需要將補碼的數值位轉換位原碼後進行運算,符號位抑或。故這裡直接討論原碼除法運算
原碼除法是指原來的兩個數,如果是原碼,則數值位可以直接參與運算;如果是補碼,需要將補碼數值位轉換為原碼進行運算。但在手算過程中容易發現,除法運算實際上是減法運算+移位操作,減法運算就需要把兩個數按照補碼的方式進行運算。
故原碼除法實際上是輸入和輸出為原碼,內部運算機制為補碼
下面只根據原本兩個數的數值位進行討論(例如:當談論除數時,指的是除數的數值位,即絕對值)
原碼除法:恢復餘數法
原碼除法:加減交替法
ieee 754
非規格化: f=
x1x2
x3..
.xn=
σi=1
nxi2
−i
f = x_1x_2x_3...x_n = \sigma_^x_i2^
f=x1x
2x3
...
xn=
σi=1
nxi
2−i
//a = 0.2,無法被表示的例項
#include
intmain
(int argc,
char
const
*ar**)
//執行結果:
0x3e4ccccd
0.200000
printf
("%d\n"
, a ==
0.2)
;printf
("%.10f\n"
, a)
;//執行結果:
00.2000000030
我們常說的小數不能直接判等是由於精度不足,指的就是ieee 754浮點表示法的精度不足。定點整數只需要考慮溢位,而浮點數需要同時考慮精度與溢位
注意!!!浮點數運算中的規格化與ieee 754標準中的規格化浮點數沒有絲毫關係!!!
階碼可以表示為:
尾數可以表示為
當給定x和y的原碼表示時(往往此時階碼和尾數都是原碼),題目中的上述要求僅僅是需要先將x和y轉換成相應格式,然後用這些格式參與運算,得到相應格式的結果,再將結果轉換為原碼。但可以在草稿紙上按照熟悉的方法(推薦將階碼和尾數都用變形補碼)計算,再換回題目要求的格式寫在答題卷上。
推薦:階碼的移碼和補碼用雙符號位處理,並換成變形補碼進行計算;尾數的原碼和補碼用雙符號位處理,並換成變形補碼計算。
先換成補碼在草稿紙上運算,在作業紙上寫題目要求的碼制對階
注意 補碼和移碼的溢位條件不同
可以先將移碼換成補碼在草稿紙上運算(對階),在換回移碼寫到作業紙上。則階碼的溢位也可以通過補碼的溢位觀察出來,這樣就無需記憶移碼的溢位和計算公式了。尾數求和
規格化
這裡只討論尾數變化,階碼要隨著尾數變化檢查溢位由於原碼和補碼可以相互轉換,且正數的原碼就是補碼,故我們只討論補碼的規格化。我們可以將兩個數的加減完全轉化成兩者的補碼的加減,然後規格化,最後再根據題目要求的碼制格式轉換回去就可以了。
這種尾數的處理辦法和階碼一樣,則尾數的溢位也可以直接通過用補碼運算時的溢位情況獲知。
檢查捨入
獲取結果階碼相加
尾數相乘
用變形補碼法觀察溢位是最保險的
變形補碼的理論基礎:由signed定點純整數的擴充套件可知,補碼擴充套件符號位不會改變實質。變形補碼的本質就是擴充套件1位符號位
定點數或浮點數運算,全部用雙符號位補碼進行運算(在作業紙按照題目要求的碼制書寫)是最保險的。
C 中數值極限的表示
關於c 中的數值極限的表示 c 中的數值極限可以利用 class numeric limits 表示,常用方法如下 include include include using namespace std int main cout numeric limits max max max min max...
用 表示數值
tchart功能就是將一組資料,按圖形顯示出來。一 定義三全陣列 a array 0.60 of string 專案 名稱 c array 0.60 of integer 專案 數值 color array 0.60 of tcolor 色彩 二 向陣列中賦值 三 顯示 chart1.seriesl...
顏色的數值表示方法
顏色的數值表示方法 說起來汗顏,老是以做設計自居,可今天看到了 666,居然不知道這個表示什麼顏色,還奇怪怎麼用三個數字表示顏色。由baidu大哥告訴我,原來這也是一種表示方法,總共有五種,以下列舉,供參考 顏色的表示共有五種方式。rrggbb 以三個00到ff的十六進製值分別表示0到255十進位值...