計算機所能完成的最基本操作是加減法和左右移。
雖然isa中一般都有mul類指令,但是這些經過解碼之後最終的元操作還是加法和移位指令。
假設不能使用乘除運算求a×b的結果,當a=b=123時,最直接的方法是通過88個88相加。但是,我們不難發現這樣的規律:
123 × 123 = (100+20+3)×123 = (100×123) + (20 × 123) + (3 × 123)
因此,我們需要進行計算的次數為min(len(a), len(b))
。
根據這個原理,不難想出二進位制的乘法運算:
0011 * 1001 = ( 0011 * 1000)+( 0011 * 0001)
注意,這時應該使用位移運算來取代乘法運算:
0011*1000 => 3<<3
0011 * 0001 => 3<<0
//不用乘除做整數乘法運算
intmult
(int a,
int b)
return ans;
}
二進位制除法的原理與在十進位制時差不多,但實現起來要比二進位制乘法稍微複雜一些,先上乙個例子(38除以6等於6餘2):
我們從被除數的最高位開始,每步迴圈結束後被除數必定小於除數,然後通過位移的方式讓被除數長度加1。
no.運算
結果餘數
11/11001
210/110010
3100/110
0100
41000/0110
1011
50111/011011
610/11001
(個位數,迴圈結束)
//二進位制除法運算
intdvi
(int a,
int b)
}return ans;
}
左移右移位運算 計組隨筆 二進位制乘除法運算
電子檔筆記整理,只是筆記,不是教程。2.二進位制除法運算 定點小數 小數點位置固定於最高位之前。定點整數 小數點位置固定於最高位之後。計算公式 計算機計算過程 判斷符號,正負得負 負負得正 正正仍正。判斷乘數數值的最後一位是1還是0 重複第二步,直到右移次數等於乘數的數值位數。設x 0.1101,y...
二進位制運算
運算子 符號含義例子與 兩邊都為真時為真 1 1 1或 任何一邊為真時為真1 非取反 如果1則為0 如果0為1 1 0 異或 兩邊相同為1 兩邊不同為0 1 1返回false 1 2返回true 運算子符號含義 例子邏輯與 判斷兩邊 都為真時為真 true true true或 判斷兩邊 任何一邊為...
二進位制運算( )
負數轉化二進位制步驟 將負數取絕對值,得到其絕對值的二進位制 6取絕對值為6,6的二進位制 0110,然後補充0110位32位 000 000 0110 一共32位,即0110前面還有28個0 然後每位取反 111 111 1001 一共32位 接著對上面得到的二進位制 111 111 1001 進...