簡單的正數二進制加法1+5 = 6spa
若是表示負數時,只是單獨的拿最高位作符號位 則short型的-7 + 7表示爲:3d
看上式,-7+7結果卻獲得了-14,而不是0code
可是若是-7用反碼來表示,就不會有問題:blog
最高位的1出界了,因此獲得的就是0了。內存
用補碼錶示時,正數的補碼是本身,負數的補碼是絕對值取反加一。若是隻用2byte表示數字,好比short,那麼 +0和 -0的都是用 00000000 00000000來表示,那麼10000000 00000000 這個表示就沒有用了,由於只有10000000 00000000取反加一 = 10000000 00000000, 可是10000000 00000000自己是個負數,由於最高的符號位是1,因此把10000000 00000000人工規定爲 -215,故short的取值範圍是 -215 ~ 215 - 1 class
short s = -1; int i = s;
上面的圖例表達的數字是,設符號位爲s:擴展
即若是咱們要表示 7.0 = 3.5 * 2(129 - 127) = 1.75 * 2(130 - 127)硬件
只要指數位增長一點,後面的小數位就能夠乘除2,因此這樣表示能夠表示範圍很大的數字,從2-127~2128(這裏只說了正數,代表精度範圍大)二進制
float f = 7.0; short s = *(short *)&f;
如圖,上述代碼的結果是short只會讀取float中高2位字節的內容float