移碼(增碼)

以單精度浮點數爲例

IEEE754規定,s作爲符號位,用0(正),1(負)表示,E作爲階碼用移碼錶示(後面解釋爲什麼用移碼),M作爲尾數,並規定最高位總爲1,因此將1省略,簡稱隱藏位。

填坑。爲什麼將E作爲移碼錶示?

首先明確一個概念,什麼移碼?移碼(增碼)是爲了某個目的存在,是符號位取反的補碼。

例: X=+1011 [X]移=11011

X=-1011 [X]移=00101

回到主題

單精度浮點數(32位),階碼(後面的用偏移階碼錶示,其實在IEEE754表示單精度浮點數都是一個概念)8位,那麼原來8位二進制數有符號二進制原碼錶示範圍是-127~127,但是IEEE爲了不在階碼中引入符號位,且8位偏移階碼(階碼中二進制數爲無符號數)範圍是1~254(爲什麼不包括0和255?後面說),因此引入偏移碼(移碼),在有符號位的二進制基礎上加127,那麼就有了偏移階碼範圍0~254,但是0不合法,後面說,因此偏移階碼範圍是1~254。    爲什麼是127呢??是不是很多人都有這個疑惑。   加上127不就從原來的二進制有符號轉變爲無符號了嘛。IEEE不就是爲了不在階碼E中不引入符號位才加的127嘛。

填坑,爲什麼範圍是1~254?

因爲0用8位階碼用全0表示,255用8位階碼用全1。      出現全0,尾數M全0,符號位爲0,爲正0,符號位爲1,爲負0(IEEE754規定的浮點數有正0負0之分),偏移階碼出現全1,尾數M全0,符號位S爲0,爲正無窮大,符號位S爲1,爲負無窮大。  這就是爲什麼不把0和255放入偏移階碼範圍中的原因。

我之前也在糾結這個問題,糾結在爲什麼是127不是128或者其他數,其實很簡單,就是爲了將有符號轉換爲無符號。   希望我這篇微博可以幫到還處於迷茫的小夥伴。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章