不用加减乘除实现加法

int sum(int a, int b)
{
    int exclusiveSum, carry;
    int num1 = a, num2 = b;
    do
    {
            exclusiveSum = num1 ^ num2;
        carry = (num1 & num2)<<1;

        num1 = exclusiveSum;
        num2 = carry;
    }while(num2 != 0)
    return exclusiveSum;
}
  • 其中 异或运算相当于对两个数进行 “不进位” 的加法,与运算并向左移一位得到两个数的加法进位,接下去重复上述过程,直到进位为零的时候结束。
  • 不使用 新的变量 实现 两个变量的交换
  1. 通过加减法
void exchange(int &a, int &b)
{
    a = a + b;
    b = a - b;
    a = a - b;
}
  1. 通过异或运算
void exchange(int &a, int &b)
{
    a = a ^ b;   
    b = a ^ b;   
    a = a ^ b;
}
  • 解说: 对同一个数进行两次异或运算 会 抵消掉
  • 如: a^b^b == a
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 关键字 1.1 关键字的概述 Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或...
    哈哈哎呦喂阅读 672评论 0 0
  • 第一章数和数的运算 一概念 (一)整数 1整数的意义 自然数和0都是整数。 2自然数 我们在数物体的时候,用来表示...
    meychang阅读 2,645评论 0 5
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,767评论 0 33
  • 2017.07.06 雷阵雨 老二已经一周岁一个月,最近站立和蹲起已经练习的很好,估计马上就要跨入直立行走的阶段。...
    戴骁勇阅读 242评论 0 1
  • (作者:刘擎 华东师范大学政治学系教授、博士生导师,华东师范大学世界政治研究中心主任) 今天我们聚集在这里,为江绪...
    格致创阅读 847评论 0 2