位运算解决“加,减,乘,除”

21 篇文章 0 订阅

用位运算解决两个加,减,乘,除

位运算符


//11 为 1 | 10 为 0 | 01 为 0

1001 & 1000 = 1000


//11 为 1 | 10 为 1 | 01 为 1

1111 | 1000 = 1111


//取反 1000 = 0111

~1000 = 0111

异或
//相同为0 不同为1

1000 ^ 1000 = 0000

简单熟悉了位运算的基本规律
在计算机中是用二进制储存信息,我们平时看到的十进制也就是我们生活所用的阿拉伯数字在计算机中是没有相加的,而是通过二进制“与”,“异或”等方式递归

  1. 加法

5 + 6 = 11

在计算机中
加法的分析图
代码实现

static int add(int a,int b) {   //&判断是否存在进位     ^不进位加法
		if(a==0)return b;
		return add((a&b)<<1,a^b);
	}

上面是一个按照图设计的一个递归,如果没有进位就返回b
每次都做a和b都做不进位加法

运行结果
加法结果

2. 减法
相对理解了加法,那么减法就是特别简单了
减法不就是 5 + -6

5 + -6 = -1

在计算机中负数就是取反加一

~101010 + 1

代码实现

	sum = add(sc.nextInt(),~sc.nextInt()+1);
		System.out.println(sum);

结果
结果
3. 乘法
相对其他只要理解了加法的运算规律,乘法也就是乘以多少个一样的
5 × 6 = 30
也就是乘以多少个5

5 + 5 + 5 + 5 + 5 = 30

最简单的就是做个循环依次相加

代码实现

	int sum =0;
	for(int i=0;i<b;i++) {
		sum=add(sum,a);
	}
	System.out.println(sum);

结果
结果
4. 除法
除法就更简单了,减去多少个它,剩下的就是取模
30 / 6 =5

30 - 6 - 6 -6 -6 -6 =0

代码实现

	int sum=0;
	while(a>=b) {
		a=add(a,(~b)+1);
		sum++;
	}
	System.out.println("商:"+sum);
	System.out.println("余:"+a+"\n公约数:");

结果
结果
总结一下

整个“加减乘除”只要掌握了加法的规律,其他就是稍作改变就可以演变

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值