基礎04 移碼和浮點數的二進位制表示

2021-09-23 19:00:40 字數 2117 閱讀 4280

本文介紹移碼以及浮點數的二進位制表示。其中浮點數的二進位制表示比較難理解,需要一點點數學知識。

在一般情況下,移碼就是將補碼的符號位取反。

-118d = -1110110b (真值)

-118d表示-118的十進位制;-1110110b表示二進位制。

原碼: 11110110

反碼: 10001001

補碼: 10001010

移碼: 00001010

符號位取反的移碼,可以等同於偏移值為128的移碼,稱為標準移碼。

即-118d+128d = 10001010b + 10000000b = 00001010b。

移碼,可以理解為補碼加上偏移值,即將整個取值範圍右移一段距離,從移碼中可以直接看出真值的大小。

-128[移]: 00000000

-127[移]: 00000001

-126[移]: 00000010

……+126[移]: 11111110

+127[移]: 11111111

x[移] = 2^(n-1) + x, -2^(n-1) <= x <= 2^(n-1) -1

x為真值,x[移]表示真值x的移碼。

舉個栗子:

乙個位元組,n=8。x[移] = 128 + x, -128 <= x <= 127

浮點數的二進位制表示,分為三個部分。

sign,符號位。0表示正,1表示負。

exponent,指數字。採用2^(n-1) - 1的移碼。n表示指數字位數。

fraction,小數字。

浮點數的位數如表所示。

—-sign

exponent

移碼fraction

32位1

82^(8 - 1) - 1 = 127

2364位111

2^(11 - 1) - 1 = 1023

52浮點數的二進位制表示用數學表示。

v= (−1)^s ×m × 2^e

(-1)^s表示符號位,當s=0,v為正數;當s=1,v為負數。

m表示有效數字,大於等於1,小於2。

e表示浮點數的指數。

對於m,1<=m<2,m可以寫成1.******的形式,其中******就是小數部分,由0,1組成。ieee754規定,第一位總是1,可以被捨去,只儲存後面的******部分。比如儲存1.01的時候,只儲存01,等到讀取的時候,再把第一位的1加上去。

指數e的特殊情況(32位浮點數為例)

浮點數的指數e

e的值m的值

數值-1270全0

±0-127

0m小數點前不加1

0.******的形式

128255

全0±無窮

128255

非0nan

9.0的表示方法:

為正數,所以sign=0。

9.0d = 1001.0b = 1.001*2^3b。注意:小數點不是十進位制的小數點,是二進位制的小數點。 1.001d ≠ 1.001b。

所以exponent的原值是3,移值是3+127=130d=10000010b。

分數部分,去掉第一位的1,剩餘001 在後面補充0,保證23位,即00100000000000000000000。

合併起來,結果為0 10000010 00100000000000000000000。

0.625的表示方法:

為正數,sign=0。

0.625d = 0.101b。其中0.1b = 0.5d = (1/2)^1;0.01b = 0.25d = (1/2)^2;0.001b = 0.125d = (1/2)^3。

0.625d = 0.101b = 1.01 * 2^(-1)。

所以exponent的原值為-1,採用移植是-1+127=126d=01111110b

分數部分,去掉第一位的1,剩餘01,在後面補充0,保證23位 01000000000000000000000

合併起來,結果為0 01111110 01000000000000000000000

移碼即補碼右移乙個偏移量。

浮點數的二進位制表示,還是很頭暈的。看不懂,多看幾遍。如果還是看不懂,那就看不懂吧。

~~ eof ~~

浮點數的二進位制

1.前幾天,我在讀一本c語言教材,有一道例題 include void main void 在我的編譯器下 編譯是會發生錯誤的。錯誤 cannot convert from int to float win7 vc6.0 sp6 執行結果如下 num的值為 9 pfloat的值為 0.000000 ...

浮點數轉化二進位制

乙個int型別表示的整數值是 2 31 2 31 1 32位二進位制表示 1111111111111111 11111111 11111111 011111111 11111111 11111111 1111111 類似整數聯想到浮點數是怎麼表示的呢?最初正常人可能為這樣想的 但是這樣好像表示的數也...

了解二進位制浮點數運算

所有的浮點數值計算都遵循ieee 754規範。ieee 754規定了四種表示浮點數值的方式 單精確度 32位 雙精確度 64位 延伸單精確度 43位以上,很少使用 與延伸雙精確度 79位元以上,通常以80位元實做 只有32位模式有強制要求,其他都是選擇性的。大部分程式語言都有提供ieee格式與算術,...