【編程範式】斯坦福公開課-學習筆記1

1.爲何在內存中用補碼錶示負數--爲了硬件能夠用統一的計算方式表達加減法

簡單的正數二進制加法1+5 = 6spa

 

若是表示負數時,只是單獨的拿最高位作符號位 則short型的-7 + 7表示爲:3d

看上式,-7+7結果卻獲得了-14,而不是0code

可是若是-7用反碼來表示,就不會有問題:blog

最高位的1出界了,因此獲得的就是0了。內存

 

2.short型的取值範圍

用補碼錶示時,正數的補碼是本身,負數的補碼是絕對值取反加一。若是隻用2byte表示數字,好比short,那麼 +0和 -0的都是用 00000000 00000000來表示,那麼10000000 00000000 這個表示就沒有用了,由於只有10000000 00000000取反加一 = 10000000 00000000, 可是10000000 00000000自己是個負數,由於最高的符號位是1,因此把10000000 00000000人工規定爲 -215,故short的取值範圍是 -215 ~ 215 - 1 class

 

3. 短字節負數向長字節拷貝時符號位如何處理 ---- 符號位擴展

short s = -1;
int i = s;

 

4. float在內存中的表示

上面的圖例表達的數字是,設符號位爲s:擴展

(-1)s*1.xxxxx*2(exp-127)

即若是咱們要表示 7.0 = 3.5 * 2(129 - 127) = 1.75 * 2(130 - 127)硬件

只要指數位增長一點,後面的小數位就能夠乘除2,因此這樣表示能夠表示範圍很大的數字,從2-127~2128(這裏只說了正數,代表精度範圍大)二進制

 

5.若是將float用short形式解讀會是怎樣的

float f = 7.0;
short s = *(short *)&f;

如圖,上述代碼的結果是short只會讀取float中高2位字節的內容float

相關文章
相關標籤/搜索