乘法:被分解為左移累加。
除法:被分解為右移累減去,減法可以轉換為加法。
浮點數的運算:
S x 2(^F) x M
浮點數是原碼表示法,S符號位,F階碼 + 127, M尾數舍棄前面的1(如果F<=-127則小數最前是0也要舍棄,后面補上0,F會變為-126)。
F階碼用的表示法是偏移碼(無符號整型表示,並不是書本說的移碼,階碼加減運算的時候,應該用了寄存器處理,不是移碼運算,因為位數都不夠)。
浮點數加減:階碼對齊; 尾數加減,處理溢出,規格化即可。
浮點數乘除:無符號階碼偏移碼加減運算,應該是轉換為真值后,進行了有符號補碼的運算,得到結果,而不是進行了移碼的運算(因為移碼運算得不到正確的結果);尾數進行整數乘除,得到結果處理溢出,規格化即可。
計算機乘法除法原理(原碼)
1.乘法
由於計算機中,所有數值都是用2的N次方來表示的:2^n0+2^n1+2^n2+2^n3+2^n4.....
因此x*y,(x)*(2^n0+2^n1+2^n2+2^n3+2^n4)=(x*2^n0)+(x*2^n1)+(x*2^n2)+(x*2^n3)+(x*2^n4)+......即(x左移n0)+(x左移n1)+(x左移n2)+(x左移n3)+(x左移n4)+......
用15(x)*13(y)來舉例,15*13 為1111*1101
a.首先y的最低位為1(2^0),x左移0位得到1111
b.然后y的最低第二位為0,沒有2^1存在,因此本次無運算(結果可以看作為0)
c.然后y的最低第三位為1(2^2),x左移2位得到111100
d.然后y的最低第四位為1(2^3),x左移3位得到1111000
e.把a、b、c、d的結果相加1111+0+111100+1111000=11000011(195),該結果就是乘法的結果
特別的,x*y中,如果y是2的N次方,因此相當於x右移N位。
2.除法(加減交替法)
x/y其實就是,x不斷減y的過程。小學時候學的長長除法就是這個原理。
用二進制的除法x/y,比十進制容易寫,商不是0即是1,而且如果除數大於除數的1倍,商就是標記在另一個位上面了
二進制除法x/y=0.1001/0.1011手工計算如下
0.11
_______
0.1001/0.1001
10010(后面補0)
-1011
------
111(余數)
1110(后面補0)
-1011
--------
1(余數)
設ri表示第i次運算后所得的余數,則:
若ri>0,則商1,余數和商左移1位,再減去除數,即ri+1=2ri-y
若ri<0,則商0,余數和商左移1位,再加上除數,即ri+1=2ri+y
用85/6來舉例,85/6=1010101/110
a.101(0101)左移1位到第3位都小於110,因此商=000
b.1010(101)左移四位是1010,比110大,商=0001,余數=1010-110=100(101)
c.余數100(101)左移一位是1001,比110大,商=00011,余數=1001-110=11(01)
d.余數11(01)左移一位是110,等於110,商=000111,余數=0(1)
e.余數0(1)左移一位是01,小於110,商=0001110,余數=01
因此85/6=1010101/110=0001110,即14,余數為最后的余數1
由於計算機中,所有數值都是用2的N次方來表示的:2^n0+2^n1+2^n2+2^n3+2^n4.....
因此x*y,(x)*(2^n0+2^n1+2^n2+2^n3+2^n4)=(x*2^n0)+(x*2^n1)+(x*2^n2)+(x*2^n3)+(x*2^n4)+......即(x左移n0)+(x左移n1)+(x左移n2)+(x左移n3)+(x左移n4)+......
用15(x)*13(y)來舉例,15*13 為1111*1101
a.首先y的最低位為1(2^0),x左移0位得到1111
b.然后y的最低第二位為0,沒有2^1存在,因此本次無運算(結果可以看作為0)
c.然后y的最低第三位為1(2^2),x左移2位得到111100
d.然后y的最低第四位為1(2^3),x左移3位得到1111000
e.把a、b、c、d的結果相加1111+0+111100+1111000=11000011(195),該結果就是乘法的結果
特別的,x*y中,如果y是2的N次方,因此相當於x右移N位。
2.除法(加減交替法)
x/y其實就是,x不斷減y的過程。小學時候學的長長除法就是這個原理。
用二進制的除法x/y,比十進制容易寫,商不是0即是1,而且如果除數大於除數的1倍,商就是標記在另一個位上面了
二進制除法x/y=0.1001/0.1011手工計算如下
0.11
_______
0.1001/0.1001
10010(后面補0)
-1011
------
111(余數)
1110(后面補0)
-1011
--------
1(余數)
設ri表示第i次運算后所得的余數,則:
若ri>0,則商1,余數和商左移1位,再減去除數,即ri+1=2ri-y
若ri<0,則商0,余數和商左移1位,再加上除數,即ri+1=2ri+y
用85/6來舉例,85/6=1010101/110
a.101(0101)左移1位到第3位都小於110,因此商=000
b.1010(101)左移四位是1010,比110大,商=0001,余數=1010-110=100(101)
c.余數100(101)左移一位是1001,比110大,商=00011,余數=1001-110=11(01)
d.余數11(01)左移一位是110,等於110,商=000111,余數=0(1)
e.余數0(1)左移一位是01,小於110,商=0001110,余數=01
因此85/6=1010101/110=0001110,即14,余數為最后的余數1