1. 程式人生 > >計算機基本運算(乘除法)

計算機基本運算(乘除法)

一、乘法

1. 計算表示式:x*y  (其中y = 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左移0位)+(x左移1位)+(x左移2位)+(x左移3位)+......

2. 以15(x)*13(y)來舉例,15*13 = 1111 * 1101

  a. y的最低位為 1(2^0), 則x左移0位得到1111

  b.y的第二低位為0,因此本次運算結果視為0

  c.y的第三低位為1(2^2), 則x左移2位得到111100

  d.y的第四低位為1(2^3), 則x左移3位得到1111000

  e.把a,b,c,d的結果相加即為該表示式的乘法結果:

 15*13 = 1111 * 1101 = 1111 + 0 + 111100 + 1111000 = 11000011

3.用一個小程式模擬計算機乘法

#include<iostream>
using namespace std;
int multi(int a,int b)
{
	int tmp=0;
	if(a<b){tmp=a;a=b;b=tmp;tmp=0;}
	while(b)
	{
		if(b&0x1)
		{
			tmp+=a;
		}	
		a<<=1;
		b>>=1;
		//cout<<a<<endl;
		//cout<<b<<endl;
	}
	return tmp;
}
int main()
{
	int a,b;
	while(cin>>a>>b)
		cout<<multi(a,b)<<endl;
	return 1;
}


二、除法

x/y其實就是,x不斷減y的過程。小學時候學的長長除法就是這個原理。
用二進位制的除法x/y,比十進位制容易寫,商不是0即是1,而且如果除數大於被除數的1倍,商就是標記在另一個位上面了

用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