博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用位运算计算两个整数的加减
阅读量:6252 次
发布时间:2019-06-22

本文共 832 字,大约阅读时间需要 2 分钟。

1、加法:

两个整数的加法可以转换成:两个整数各自2进制位的纯加法和s【不包括进位】,记录两个整数在哪一位上有进位的变量carry。然后结果就转化为了 s+carry。接着,再使用相同的方式,直到carry为0为止。此时,相当于被加数为0,和就是加数本身。

递归方式:

1 // 使用位运算计算两个数的加法2         int sum(int a, int b)3         {4             if (b == 0) return a;5             int s = a ^ b;6             int carry = (a & b) << 1;  // 如果两个数对应的位都是1,说明该位有一个进位7             // 此时的和即为 sum + carry8             return sum(s, carry);9         }

非递归方式:

1         int _sum(int a, int b) 2         { 3             int s = a ^ b; 4             int carry = (a & b) << 1;  // 如果两个数对应的位都是1,说明该位有一个进位 5             while (carry != 0) 6             { 7                 a = s; 8                 b = carry; 9                 s = a ^ b;10                 carry = (a & b) << 1;11             }12 13             return s;14         }

 

转载于:https://www.cnblogs.com/kylinxue/p/4797495.html

你可能感兴趣的文章
darknet源码学习
查看>>
dl,dt,dd的用法
查看>>
外面的世界很精彩,然而等待你的人却可能已不在
查看>>
成为一名阿里P7Java架构师需要的技术准备(转载)
查看>>
华为oj 挑7
查看>>
【吴恩达机器学习】学习笔记——1.5无监督学习
查看>>
使用pjax实现类似github无刷新更改页面url
查看>>
移动端头部meta
查看>>
回溯法
查看>>
iOS常用宏定义
查看>>
memcached(一)--前言
查看>>
【转】各种排序算法时间复杂度和空间复杂度表
查看>>
Redis客户端集群
查看>>
EF异常:WebForm、Console、Winform层不引入EF报错
查看>>
System系统类常用方法
查看>>
15:开发Rsync服务启动脚本案例
查看>>
uva 1592(NEERC 2009 STL)
查看>>
Xqk.Data数据框架使用说明之:使用Xqk.Data的一般步骤
查看>>
makefile
查看>>
C#数据类型
查看>>