我是靠谱客的博主 细心含羞草,最近开发中收集的这篇文章主要介绍算法:两个数不使用算术运算符相加(以及二进制相加),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

两个十进制数不使用算术运算符相加。方法为用二进制相加。

只需要 a ^ b 接着 (a & b) << 1 循环往复
(^ 异或不同为真)(& 与 相同为真)
a ^ b 异或用来计算非进位部分
a & b 用来计算进位部分,由于目标已经进位,就需要在原基础上左移一位 << 1

例如:1100 + 0110
1100 ^ 0110 先计算非进位部分使用 ^ 不同为真,只有同位上为1和0时结果才是1,最终结果为1001。
再计算进位部分使用&同真为真,都为1时进位,结果是0100,此时需要进一位,就要左移一位 << 1

// 两个数不使用算术运算符实现相加
public int add(int a, int b) {
    int sum = 0, carry = 0;
    while(b != 0) {
        sum = a ^ b;			// 异或计算未进位的部分
        carry = (a & b) << 1;	// 进位部分3
        a = sum;				// 保存未进位部分,再次计算
        b = carry;				// 保存进位部分,再次计算
    }
    return a;	// 最后无进位,异或的结果即加法结果
}

两个二进制数相加也用了相同的方法
注意: 32 位整数会溢出

// 二进制相加
public String addBinary(String a, String b) {
     int x = Integer.parseInt(a, 2);
	 int y = Integer.parseInt(b, 2);
	  int sum = 0;
	  int carry = 0;
	  while (y != 0) {
	      sum = x ^ y;
	      carry = (x & y) << 1;
	      x = sum;
	      y = carry;
	  }
	  return Integer.toBinaryString(x);
}

最后

以上就是细心含羞草为你收集整理的算法:两个数不使用算术运算符相加(以及二进制相加)的全部内容,希望文章能够帮你解决算法:两个数不使用算术运算符相加(以及二进制相加)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部