加法的实现-不用加减乘除运算
来源:互联网 发布:数据自动生成图表 编辑:程序博客网 时间:2024/06/05 17:42
来源于一个笔试题目
笔试面试题目都很有意思….
笔试题如下:
不使用加减乘除,计算一个数字的7倍
位运算
相信你第一个想到的方法就是位运算吧,没错,除了位运算,也没有其他办法了吧。
位运算以计算效率高、占用空间小等优点著称,在平时写程序的过程中,可以考虑加入一些位运算,来提高一下程序的执行效率。
题目分析
首先,求一个数字的倍数,首先对应的位运算就是移位:
num <<1 ; // *2num <<2 ; // *4num <<3 ; // *8
7倍? 出题人怎么能这么容易就让你得出结果!如果距离答案更近一些的话,就是:
(num <<3) - num;
但是,不能用减法(加法),因此,还要解决一个加减法问题,才能取得真经。
知识准备
首先解决的是加法问题,计算机组成原理中讲过基本的加法的实现过程。
这里,我们其实只需要实现一个基本的加法:
从上面的表可以看出一种实现简单的多位二进制整数加法的算法如下:
m 和 n 是两个二进制整数,求 m + n:
- 用与运算求 m 和 n 共同为 “1” 的位: m’ = m & n
- 用异或运算求 m和 n 其中一个为 “1” 的位: n’ = m ^ n
- 如果 m’ 不为 0,那么将 m’ 左移一位(进位),记 m = m’ <<1,记 n = n’,跳回到步骤 1
如果 m’ 为 0,那么 n’ 就是我们要求的结果。
实践应用
C++ 代码如下
int addofnumber(int &m, int &n){ int a=m,b=0; while(a!=0) { a = (m & n) << 1; b = m ^ n; m = a; n = b; } return b;}
完整的测试程序
#include <iostream>using namespace std;int addofnumber(int &m, int &n);int addofnumber(int &m, int &n){ int a=m,b=0; while(a!=0) { a = (m & n) << 1; b = m ^ n; m = a; n = b; } return b;}int main(){ int num=20; cout<<addofnumber(num<<3,-num); return 0;}
0 0
- 加法的实现-不用加减乘除运算
- 不用加减乘除实现加法运算
- 不用加减乘除实现加法运算
- 不用加减乘除实现加法
- 不用加减乘除实现加法
- 不用加减乘除实现加法
- 不用加法实现加减乘除
- 不用加减乘除做加法运算
- 不用加减乘除做加法运算
- 不用加减乘除的加法
- 实现加法计算(不用加减乘除运算符)
- 位运算之不用加减乘除做加法.
- 不用加减乘除做加法。。。二进制运算
- java实现不用加减乘除做2个数的加法
- 不用 + -× /实现加法运算
- 不用+-*/实现加法运算
- 不用‘+’实现加法运算
- 不用加减乘除做加法(Java实现)
- 各向异性扩散滤波_原理与算法
- 使用volatile类型发布不可变对象
- ecshop数据库表4(ecs_admin_log)管理 日志表
- Loadrunner11 录制手机App脚本多种方法介绍
- PHP对象和数组的相互转换
- 加法的实现-不用加减乘除运算
- 利用opencv进行面部和眼睛检测
- 有个人主页了,这里不再维护了
- 多线程中的使用共享变量的问题
- 进程间通信相关函数
- CentOS 6 安装Teamviewer
- Android——NDK笔记
- java优先级的一个细节
- lightoj 1085 树状数组+dp