⚠️難點 1. 無符號數的機器數
無符號數因為沒有符號,所以他的機器數就是他本身,
如1110 0000,那麼機器數也是1110 0000。
兩個無符號數做減法運算
x-y,那麼把y整體取反+1,變成y『和x相加
如果產生了進製,則進製直接捨棄。
有意思的是,當你printf輸出時,如果輸出為無符號數,則8位數字變成十進位制輸出。如果輸出為有符號數,則第八位數字為符號位。你說你存的時候是無符號數,計算機說,get了,把它八位存進去,不夠的我就補0,補成8位。後來你取它時,忘了它是有符號數還是無符號數,於是你認為是有符號數,於是他就把第八位當作符號位,給輸出。
因此有符號數的補碼(機器數)1100 1111=-49
無符號數的的機器數為1100 1111=207
而49+207=256=2^8
因此如果講有符號數轉換為無符號數,看看表示乙個數用幾位,如果是8位,即2^8-有符號數的真值的絕對值。
⚠️難點2.ieee754標準的浮點數
0b1100=1.12^3
單精度階碼e=1到256,e-127=-126到127
所以單精度最小正數:1.02^(-126)
最大正數1.1111 1111 1111 1111 1111 1112127=2127(2-2^-23)
若是0000 0000 0000…0000,那麼真值為0
若是0011 1111 1000 0000…0000,那麼真值為正無窮
⚠️注意,由於ieee的階碼一般用移碼表示,因為對於那八位階碼是無符號數,直接計算8位的二進位制數。
0b1000 0000 0100 0000 …0000
e=0,但e的取值應該是1-254沒有0,所以拿隱藏的1頂上去,即0.1*2-126=2-127
⚠️難點3
1111
222*2=2^4=16
1+2+4+8=15
即2^4-1
⚠️難點4
整數換算成浮點數,先把它換算成二進位制數
-68=1000100
⚠️難點5
ieee單精度浮點數對於尾數的取值為23位,但由於規定隱藏了乙個1,因此可以表示24位數,即最大是
1.11…1111(共24個1)
如果尾數超過了24位,就需要進製。
對於1.111…111(24個1)而言,進製,會使階碼加1,若階碼此時為111111110(在機器中的表示)(階碼不能全1,不能全0)
即為2^8-1-1-127=127
那麼捨棄24位以後的尾數進1,會引起溢位
因此我們可以看到加減法運算,尾數溢位不是真的溢位,而階碼溢位為真的溢位
⚠️難點6
float型變數在計算機中都被表示成ieee 754單精度格式
機器補碼浮點運算規則是階符2 階碼3 數符2 尾數9
運算的時候,需要將數符也參與運算
⚠️難點7
浮點數溢位問題
階碼上溢位,如ieee表示的浮點數中,階碼部分的值為11111111,如果數為正數,就是+∞,如果數為負數,就是-∞。這種為軟體故障
階碼下溢位,如ieee表示的浮點數中,階碼部分的值為000000,就是下溢位,則置值為0,不發生溢位故障
⚠️難點8
在ieee中,容易遺忘的一點,偏移量的設定,單精度為127,雙精度為1023
這個設定是這麼來的
8位表示階碼,那麼偏移量的值為2^7-1
⚠️難點9
原碼補碼反碼的表示範圍最好是要記清楚,這樣可以省下很多的時間
?小數 字長為n+1(表示包含符號)
原碼的表示範圍=反碼的表示範圍
-(1-2n)~1-2n
補碼-1~1-2^n
?整數 字長為n+1(包含符號)
原碼的表示範圍=反碼的表示範圍
-(2n-1)~2n-1
補碼-2n~2n-1
補碼為啥那麼反常呢,因為補碼的+0和-0都為0.000
計算機系統第二章 浮點數
二進位制小數 底權公式 1011.101 8 2 1 0.5 0.125 11.625 竅門 小數部分寫成分數,分母為2 k,k為小數字數,分子為小數部分二進位制的值,即101 5 8 0.625 觀察 小數點右移一位 乘2 小數點左移一位 除2 二進位制小數表示範圍 只能精確表示諸如x 2 k的數...
了解二進位制浮點數運算
所有的浮點數值計算都遵循ieee 754規範。ieee 754規定了四種表示浮點數值的方式 單精確度 32位 雙精確度 64位 延伸單精確度 43位以上,很少使用 與延伸雙精確度 79位元以上,通常以80位元實做 只有32位模式有強制要求,其他都是選擇性的。大部分程式語言都有提供ieee格式與算術,...
第二章 in ,like , 集合運算
in select from emp2 where job salesman or job president or job analyst select from emp2 where job in salesman president analyst not in 注意and的使用 select...