计算机基本运算(乘除法)

一、乘法

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

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值