博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现两个数相加不用四则运算
阅读量:6638 次
发布时间:2019-06-25

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

分析:实现两个是相加不用四则运算,根据计算机中的运算不用四则运算那么肯定是位运算了。

(以下分析来自剑指offer)比如我们计算5+17=22这个结果,世界上,我们可以分为3个步骤计算,第一步各位数相加不进位,此时的结果是12(个位相加不进位是2,十位相加是1),所以结果是12; 第二步做进位,5+7有进位,进位值是10;第三步是把前两步计算结果加起来。12 + 10 = 22.

那么运用位运算二进制的数字也可以这么考虑,5是二进制的101,17是二进制的10001。试着把计算分为3步走,第一步各位相加不进位,得到的结果是10100;第二步是记下进位,根据这个例子进位计算结果是10;第三步是把前两步计算结果相加得到结果10110.转化为10进制刚好是22。 用二进制计算,第一步不考虑进位,即每一位相加 0+0=0,1+1=0,0+1=1,1+0=1。结果符合二进制数据的异或运算。第二步只考虑进位运算,0+0,0+1,1+0都不会进位,只有1+1才会进位,结果符合两个数的与运算结果然后向左移动一位。第三步,把前两步骤的结果相加,相加步骤仍然是重复前两步骤。直到不产生进位值。

//实现两个数不用四则运算实现加运算#include
#include
int Add(int num1,int num2){ int sum = 0,carry = 0; do{ sum = num1 ^ num2; carry = (num1 & num2)<<1; num1 = sum; num2 = carry; }while(num2 != 0); return num1;}int main(){ int num1,num2; printf("输入两个整数:\n"); scanf("%d%d",&num1,&num2); int res = Add(num1,num2); printf("result:%d",res); return 0;}

 

转载地址:http://mlivo.baihongyu.com/

你可能感兴趣的文章
settimeout 推荐的最小值
查看>>
MySQL 常用命令
查看>>
HttpClient4上传文件
查看>>
centos6.4和Ubuntu14.04搭建SNMP服务
查看>>
为微信小程序增加mixin扩展
查看>>
敏感信息识别方法探究
查看>>
创建一个可执行的python脚本
查看>>
听云APP 图表分析
查看>>
Oracle排名函数运用实例
查看>>
【推荐】[网址]PHP各种开源网站系统、cms系统一览[持续更新]
查看>>
整合 Apache 与 Tomcat
查看>>
螺旋矩阵打印java实现
查看>>
centos下java调用命令报 java.io.IOException: error=2, No such file or directory的错误
查看>>
Centos7 修改主机名
查看>>
javascript选择后弹出框消失
查看>>
JDK 1.7 HashMap原理及源码解析
查看>>
绘图UIGraphicsGetCurrentContext返回为空?
查看>>
FMDB使用
查看>>
Exchange Server2010五大角色
查看>>
博为峰Java技术题 ——JavaSE Scanner类Ⅰ
查看>>