二進制乘法演算法
① 二進制的演算法 多舉個例子。
1、加法法則: 0+0=0,0+1=1+0=1,1+1=10
2、減法法則: 0 - 0 = 0 1 - 0 = 1 1 - 1 = 0 0 - 1 = 1 有借位,借1當(10)2 0 - 1 - 1 = 0 有借位 1 - 1 - 1 = 1 有借位。減法,當需要向上一位借數時,必須把上一位的1看成下一位的(2)10。
3、乘法法則: 0×0=0,0×1=1×0=0,1×1=1
4、除法法則: 0÷1=0,1÷1=1 除法應注意: 0÷0 = 0 0÷1 = 0 1÷0 = 0 (無意義)
(1)二進制乘法演算法擴展閱讀
二進制是計算技術中廣泛採用的一種數制。二進制數據是用0和1兩個數碼來表示的數。它的基數為2,進位規則是「逢二進一」,借位規則是「借一當二」,由18世紀德國數理哲學大師萊布尼茲發現。當前的計算機系統使用的基本上是二進制系統,數據在計算機中主要是以補碼的形式存儲的。計算機中的二進制則是一個非常微小的開關,用「開」來表示1,「關」來表示0。
② 二進制加減乘除如何算,高手來啊!
二進制遵循以下法則:0+0=0、0+1=1、1+0=1、1+1=0 進位、0-0=0、0-1=1 借位。
代入計算得10000-111=1001。
二進制乘法:(如10111<<1000代表在10111後面添加3個零)
10010<<10000=100100000
10010<<1000=10010000
10010<<10=100100
最後相加,得
100100000+10010000+100100
=110110000+100100
=111010100
(2)二進制乘法演算法擴展閱讀:
二進制優點
1、數字裝置簡單可靠,所用元件少。
2、只有兩個數碼0和1,因此它的每一位數都可用任何具有兩個不同穩定狀態的元件來表示。
3、基本運算規則簡單,運算操作方便。
二進制缺點
用二進製表示一個數時,位數多。因此實際使用中多採用送入數字系統前用十進制,送入機器後再轉換成二進制數,讓數字系統進行運算,運算結束後再將二進制轉換為十進制供人們閱讀。
二進制和十六進制的互相轉換比較重要。不過這二者的轉換卻不用計算,每個C,C++程序員都能做到看見二進制數,直接就能轉換為十六進制數,反之亦然。
③ 二進制數如何進行乘法運算
1、無符號乘法。
無符號的乘法與加法類似,它的運算方式是比較簡單的,只是也可能產生溢出。對於兩個w位的無符號數來說,它們的乘積范圍在0到(2w-1)2之間,因此可能需要2w位二進制才能表示。
因此由於位數的限制,假設兩個w位的無符號數的真實乘積為pro,根據截斷的規則,則實際得到的乘積為 pro mod 2w。
2、補碼乘法。
與加法運算類似,補碼乘法也是建立在無符號的基礎之上的,因此我們可以很容易的得到,對於兩個w位的補碼數來說,假設它們的真實乘積為pro,
則實際得到的乘積為:
U2Tw(pro mod 2w。
上面的式子有一個假設,就是假設對於w位的兩個補碼數來說,它們的乘積的低w位與無符號數乘積的低w位是一樣的。這意味著計算機可以使用一個指令執行無符號和補碼的乘法運算。
3、乘法運算的優化。
根據小學所學的乘法運算,假設兩個w位的二進制數相乘,則需要進行w次與運算,然後進行w - 1次加法運算才能得到結果。
從此不難看出,乘法運算的時間周期是很長的。因此計算機界的高手們想出了一種方式可以優化乘法運算的效率,就是使用移位和加法來替代乘法。
上述優化的前提是對於一個w位的二進制數來說,它與2k的乘積,等同於這個二進制數左移k位,在低位補k個0。在書中對這一等式進行了證明,過程如下。
這個過程主要應用了無符號編碼的公式。
有了上面的基礎,就可以使用移位和加法對乘法優化了。
對於任意一個整數y,它總能使用二進制序列表示(假設不超過二進制的表示範圍),因此可以將x和y乘積的二進制序列表示為如下形式(此公式在書中沒有展現)。
x * y = x * (yw-12w-1 + ... + y020) = (x << w-1) * yw-1 +....+ (x << 0 ) * y0。
舉個例子,對於x * 17,可以計算x * 16 + x = (x << 4) + x ,這樣算下來的話,只需要一次移位一次加法就可以搞定這個乘法運算。
而對於x * 14,則可以計算 x * 8 + x * 4 + x * 2 = (x << 3) + (x << 2) + (x << 1) ,更快的方式可以這么計算,x * 16 - x * 2 = (x << 4) - (x << 1) 。
這里最後需要提一下的是,加法、減法和移位的速度並不會總快於乘法運算,因此是否要進行上面的優化就取決於二者的速度了。
4、二進制乘法的運算步驟。
二進制數乘法過程可仿照十進制數乘法進行。
但由於二進制數只有0或1兩種可能的乘數位,導致二進制乘法更為簡單。二進制數乘法的法則為:
1、0×0=0。
2、0×1=1×0=0。
3、1×1=1。
例如:1001和1010相乘的過程如下:
某次部分積的最低位必須和本位乘數對齊,所有部分積相加的結果則為相乘得到的乘積。
參考資料來源:網路——二進制乘法
④ 二進制的加法和乘法運算規則是什麼
二進制乘法和加法都是通過對二進制數的移位來實現的,移位相當於×2,計算機算根據給出的加法式子與乘法式子算要移多少位。
擴展:
1、二進制數據的表示法
二進制數據也是採用位置計數法,其位權是以2為底的冪。例如二進制數據110.11,其權的大小順序為2^2、2^1、2^0、2^-1、2^-2。對於有n位整數,m位小數的二進制數據用加權系數展開式表示,可寫為:
(a(n-1)a(n-2)…a(-m))2=a(n-1)×2^(n-1)+a(n-2)×2^(n-2)+……+a(1)×2^1+a(0)×2^0+a(-1)×2^(-1)+a(-2)×2^(-2)+……+a(-m)×2^(-m)
二進制數據一般可寫為:(a(n-1)a(n-2)…a(1)a(0).a(-1)a(-2)…a(-m))2。
注意:
1.式中aj表示第j位的系數,它為0和1中的某一個數。
2.a(n-1)中的(n-1)為下標,輸入法無法打出所以用括弧括住,避免混淆。
3.2^2表示2的平方,以此類推。
【例1102】將二進制數據111.01寫成加權系數的形式。
解:(111.01)2=(1×2^2)+(1×2^1)+(1×2^0)+(0×2^-1)+(1×2^-2)
二進制和十六進制,八進制一樣,都以二的冪來進位的。
二進制數據的算術運算的基本規律和十進制數的運算十分相似。最常用的是加法運算和乘法運算。
1. 二進制加法
有四種情況: 0+0=0
0+1=1
1+0=1
1+1=10 進位為1
【例1103】求 (1101)2+(1011)2 的和
解:
1 1 0 1
+ 1 0 1 1
-------------------
1 1 0 0 0
2. 二進制乘法
有四種情況: 0×0=0
1×0=0
0×1=0
1×1=1
【例1104】求 (1110)2 乘(101)2 之積
解:
1 1 1 0
× 1 0 1
-----------------------
1 1 1 0
0 0 0 0
1 1 1 0
-------------------------
1 0 0 0 1 1 0
(這些計算就跟十進制的加或者乘法相同,只是進位的數不一樣而已,十進制的是到十才進位這里是到2就進了)
3.二進制減法
0-0=0,1-0=1,1-1=0,10-1=1。
4.二進制除法
0÷1=0,1÷1=1。[1][2]
5.二進制拈加法
拈加法二進制加減乘除外的一種特殊演算法。
拈加法運算與進行加法類似,但不需要做進位。此演算法在博弈論(Game Theory)中被廣泛利用。
十進制數轉換為二進制數、八進制數、十六進制數的方法:
二進制數、八進制數、十六進制數轉換為十進制數的方法:按權展開求和法
1.二進制與十進制間的相互轉換:
(1)二進制轉十進制
方法:「按權展開求和」
例: (1011.01)2 =(1×2^3+0×2^2+1×2^1+1×2^0+0×2^(-1)+1×2^(-2) )10
=(8+0+2+1+0+0.25)10
=(11.25)10
規律:個位上的數字的次數是0,十位上的數字的次數是1,......,依獎遞增,而十
分位的數字的次數是-1,百分位上數字的次數是-2,......,依次遞減。
注意:不是任何一個十進制小數都能轉換成有限位的二進制數。
(2)十進制轉二進制
· 十進制整數轉二進制數:「除以2取余,逆序排列」(除二取余法)
例: (89)10 =(1011001)2
2 89 ……1
2 44 ……0
2 22 ……0
2 11 ……1
2 5 ……1
2 2 ……0
1
· 十進制小數轉二進制數:「乘以2取整,順序排列」(乘2取整法)
例: (0.625)10= (0.101)2
0.625X2=1.25 ……1
0.25 X2=0.50 ……0
0.50 X2=1.00 ……1
2.八進制與二進制的轉換:
二進制數轉換成八進制數:從小數點開始,整數部分向左、小數部分向右,每3位為一組用一位八進制數的數字表示,不足3位的要用「0」補足3位,就得到一個八進制數。
八進制數轉換成二進制數:把每一個八進制數轉換成3位的二進制數,就得到一個二進制數。
八進制數字與二進制數字對應關系如下:
000 -> 0 100 -> 4
001 -> 1 101 -> 5
010 -> 2 110 -> 6
011 -> 3 111 -> 7
例:將八進制的37.416轉換成二進制數:
3 7 . 4 1 6
011 111 .100 001 110
即:(37.416)8 =(11111.10000111)2
例:將二進制的10110.0011 轉換成八進制:
0 1 0 1 1 0 . 0 0 1 1 0 0
2 6 . 1 4
即:(10110.011)2 = (26.14)8
3.十六進制與二進制的轉換:
二進制數轉換成十六進制數:從小數點開始,整數部分向左、小數部分向右,每4位為一組用一位十六進制數的數字表示,不足4位的要用「0」補足4位,就得到一個十六進制數。
十六進制數轉換成二進制數:把每一個十六進制數轉換成4位的二進制數,就得到一個二進制數。
十六進制數字與二進制數字的對應關系如下:
0000 -> 0 0100 -> 4 1000 -> 8 1100 -> C
0001 -> 1 0101 -> 5 1001 -> 9 1101 -> D
0010 -> 2 0110 -> 6 1010 -> A 1110 -> E
0011 -> 3 0111 -> 7 1011 -> B 1111 -> F
例:將十六進制數5DF.9 轉換成二進制:
5 D F . 9
0101 1101 1111 .1001
即:(5DF.9)16 =(10111011111.1001)2
例:將二進制數1100001.111 轉換成十六進制:
0110 0001 . 1110
6 1 . E
即:(1100001.111)2 =(61.E)16