参考http://www.cnblogs.com/dandingyy/archive/2012/10/29/2745570.html 和 http://blog.csdn.net/hackbuteer1/article/details/7390093

面试必备。

#include<iostream>
#include<cstdlib>
using namespace std;//递归版本的加法实现
int Add(int a, int b)
{return b ? Add(a^b, (a&b)<<1) : a;/*if(b)return plus_rec(a^b, (a&b)<<1);elsereturn a;*/
}//该为迭代版本
int Add_iter(int a, int b)
{int ans;while(b){ans = a^b;b = (a&b)<<1;a = ans;}return ans;
}//求a的相反数:将各位取反加一
int negative(int a)     //get -a
{return Add(~a, 1);
}int Minus(int a, int b)
{return Add(a, negative(b));
}//正数乘法
int Multi(int a, int b)
{int ans = 0;while(b){if(b&1)ans = Add(ans, a);a = a << 1;b = b >> 1;}return ans;
}//正数除法
int Divide(int a, int b)
{int coun = 0;while(a >= b){a = Minus(a, b);coun = Add(coun, 1);}return coun;
}//判断是否是负数,0,正数
int isneg(int a)
{return a & 0x8000;
}
int iszero(int a)
{return !(a & 0xFFFF);
}
int ispos(int a)
{return (a&0xFFFF) && !(a&0x8000);
}//处理负数的乘法和除法
int My_Multi(int a, int b)
{if(iszero(a) || iszero(b))return 0;if(isneg(a)){if(isneg(b))return Multi(negative(a), negative(b));elsereturn negative(Multi(negative(a), b));}else if(isneg(b))return negative(Multi(a, negative(b)));elsereturn Multi(a, b);
}int My_Divide(int a, int b)
{if(iszero(b)){cout << "Error!" << endl;exit(1);}if(iszero(a))return 0;if(isneg(a)){if(isneg(b))return Divide(negative(a), negative(b));elsereturn negative(Divide(negative(a), b));}else if(isneg(b))return negative(Divide(a, negative(b)));elsereturn Divide(a, b);}int main(int argc, char **argv)
{int a = 5;int aa = -5;int b = 3;int bb = -3;int c = 15;cout << Add(a, b) << endl;cout << Add(a, bb) << endl;cout << Minus(a, b) << endl;cout << Minus(b, a) << endl;cout << Multi(a, b) << endl;cout << My_Multi(aa, b) << endl;cout << Divide(c, a) << endl;return 0;
}

View Code

转载于:https://www.cnblogs.com/jiasaidongqi/p/4362526.html

利用位运算实现加减乘除相关推荐

  1. C++学习笔记-----用位运算实现加减乘除

    C++学习笔记-----用位运算实现加减乘除 原文:http://blog.csdn.net/sinat_35261315/article/details/72904945 数据在计算机内存中是以二进 ...

  2. php 位运算与权限,PHP巧妙利用位运算实现网站权限管理的方法

    首先我们先定义4个常量来设定四种权限: ===================================== define(ADD,1);//增加数据库记录的权限 define(UPD,2);/ ...

  3. 利用位运算和指针实现的交换两个数的程序

    位运算是C语言的一大特色,利用异或运算可以实现交换两个数,原理是一个整数与另外一个数进行两次异或运算仍然是其本身,基本原理用式子表达如下: (1) A ^ A = 0; (2) A = A ^B; ( ...

  4. 利用位运算解决 N 皇后问题

    题目: LeetCode 51. N-Queens 分析: N 皇后问题是考查递归回溯的经典问题,深度优先搜索的难点在于如何剪枝,在这个问题里面的剪枝,我们需要利用额外的空间去记录当前行的有效空位,只 ...

  5. C# 利用位运算传递多个参数方法

    前言 在工作中用sendMessage的方法向另外一个进程中传递窗体的位置,长度,宽度四个值,但是sendMessage的方法签名中只有两个参数.于是在网上找到了一些代码,找到了这个利用位运算来合并参 ...

  6. 【C++】位运算实现加减乘除

    1 #include<iostream> 2 #include<assert.h> 3 using namespace std; 4 5 // 位运算实现加减乘除 6 7 in ...

  7. java加减_Java位运算实现加减乘除

    一.加法 a+b 举例实现:13+9=22 13+9不考虑进位结果为12 只考虑进位结果为10 和刚好是22. 13二进制为1101,9二进制为1001. 不考虑进位结果为0100.算式为a^b 只考 ...

  8. 利用位运算控制开关灯问题

    <C++笔记> 利用位运算控制开关灯问题 新手上路,可能有很多不足的地方,欢迎大家多多在留言区提出自己的观点以及更好的办法. 问题描述:俱乐部一共有32盏灯,设计一个灯光控制系统,共有4部 ...

  9. 只使用位运算实现加减乘除

    在线OJ: LeetCode 29. 两数相除 原题目的要求是不能使用乘法, 除法和取余运算符实现除法. 在本篇博客中把题目要求提高一点, 这里只使用位运算来实现, 顺便的也就把只使用位运算实现加减乘 ...

最新文章

  1. DATEIF实例说明3
  2. SVN 报错“Previous operation has not finished; run ‘cleanup‘ if it was interrupted”
  3. pycharm用爱发电
  4. 一维二维码的提取、识别和产生
  5. python显示图像某列的颜色值_Python Pandas Matplotlib图由单列中定义的类型值着色
  6. java alder32_Java里面计算Adler32校验
  7. jetty优秀文章转载
  8. Android studio真机调试
  9. nodejs做中间层_nodejs做中间层,向后端取数据
  10. lesson 2.4 - Converting MEL Commands to Python
  11. 震精 - PostgreSQL 递归查询 - 树型数据按路径分组输出
  12. 《C语言及程序设计》实践参考——找数字
  13. 代理服务器的工作原理是什么?
  14. ps--光照+光晕+模糊
  15. 基于Unity3D 的Vuforia SDK开发基础教程
  16. 三菱PLC FB库新建和调用-(Gx Work2版本)
  17. centos7安装XtraBackup 2.4.4
  18. 学习笔记(28):MATLAB基础入门课程-乘方运算
  19. 干货收集和整理:Pytorch,Keras,数据分析
  20. 计算构成三角形的个数

热门文章

  1. 【linux高级程序设计】(第八章)进程管理与程序开发 4
  2. 谨记这10条,就能给别人留下好印象?
  3. 自己构造公共程序(3)--DataGrid小方法
  4. mysql frm 没有myd_MySQL表只对应一个.frm文件,没有.MYD 和.MYI文件
  5. Linux基础命令---lpq查看打印队列
  6. C++ Primer 第二章 学习笔记及习题答案
  7. Mybatis bug修正
  8. localStorage、cookie
  9. Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式
  10. Office 365强势来袭PART3:管理云用户