解决方案

需要熟练掌握一些常见的位操作实现,具体为:

1)常用的等式:-n=~(n-1)=~n+1

2)获取整数n的二进制中最后一个1:n&(-n)或者n&~(n-1)如:n=010100,则-n=101100,n&(-n)=000100

3)去掉整数n的二进制中最后一个1:n&(n-1),如:n=010100,n-1=010011,n&(n-1)=010000

1 利用位运算实现加法

由于我们不能使用任何算术运算符,因此可供我们使用的就只有位运算符了。 于是我们把操作数看成二进制表示,然后对它们做类似的操作:

  1. 不考虑进位的按位求和,(0,0),(1,1)得0,(1,0),(0,1)得1, 使用异或操作可以满足要求。
  2. 只考虑进位,只有(1,1)才会产生进位,使用按位与可以满足要求。 当前位产生进位,要参与高一位的运算,因此按位与后要向左移动一位。
  3. 递归求和,直到进位为0

实现代码:

int add(int a,int b)
{int carry,add; do{ add=a^b; carry=(a&b)<<1; a=add; b=carry; }while(carry!=0); return add; }

2 减法实现

减法和容易地转换为加法:a-b=a+(-b)=a+(~b+1)

int subtract(int a,int b)
{return add(a,add(~b,1)); }

3 乘法实现

乘法的实现可以转换成:k31*(2^31)+k30*(2^30)+...+k2*(2^2)+k1*(x^1)+k0*(x^0);其中k0~k31取0或者1

//正整数的乘法
int multiply(int a,int b) { int ans=0; while(b) { if(b&1) ans=add(ans,a); a=a<<1; b=b>>1; } return ans; }

4 除法实现

int divide(int a,int b)
{int count=0; while(a>=b) { a=subtract(a,b); count=add(count,1); } return count; }

改进的除法:

int div(const int x,const int y) { int left_num=x; int result=0; while(left_num>=y) { int multi=1; while(y*multi<=(left_num>>1)) { multi=multi<<1; } result+=multi; left_num-=y*multi; } return result; }

转载于:https://www.cnblogs.com/alantu2018/p/8460878.html

位操作实现加减乘除四则运算相关推荐

  1. 每天一道LeetCode----位运算实现加减乘除四则运算

    Divide Two Integers 原题链接Divide Two Integers 意思是重新实现除法运算,这里不要复习一下用位运算实现加减乘除四则运算 C++学习笔记-–用位运算实现加减乘除以前 ...

  2. Qt之加减乘除四则运算-支持负数

    一.效果展示 如图1所示,是简单的四则运算测试效果,第一列为原始表达式,第二列为转换后的后缀表达式,冒号后为结果.表达式支持负数和空格,图中是使用了5组测试数据,测试结果可能不全,如大家发现算法有问题 ...

  3. java编程计算加减乘除_Java程序完成加减乘除四则运算

    一.项目名称:加减乘除四则运算 二.设计思路: 1.在对话框中输入两个数,并转化为int类型 2.进行加减乘除四则运算 3.输出结果 三.流程图 四.源代码 import javax.swing.JO ...

  4. C语言之回调函数(非常重要)附带回调函数版本实现整型的加减乘除四则运算

    对于回调函数!想必大家的第一想法,想必就是函数吧!其实这个也是笔者的第一想法,毕竟之前没有见过回调函数,所以就不怎么知道细节!默认为直接调用函数,就是回调函数,但等学会了回调函数,其实就不是这样想了! ...

  5. java分子分母的加减乘除_加减乘除四则运算

    个人项目实战-四则混合运算 coding.net源码地址 :https://git.dev.tencent.com/qyj814/fours.git 一.实验要求 基本任务: 使用JAVA编程语言,独 ...

  6. java实现三位数加减乘除_用Java位运算实现加减乘除四则运算

    感谢博客:http://blog.csdn.net/itismelzp/article/details/49621741  提供的思路. 要用位运算来实现四则运算,不仅仅要知道&,|,~,^, ...

  7. java 整数加减乘除_java实现超大整数加减乘除四则运算

    packagecom.hdwang;importjava.util.regex.Matcher;importjava.util.regex.Pattern;/*** 大数四则运算(超出long型的大数 ...

  8. 案例4加减乘除四则运算

    这是从网上下载下来的一个计算程序,能实现加.减.乘.除的计算.该程序接受的是16进制数. 执行时,需在文件名后直接跟上计算表达式,如在命令提示符下执行结果如下: c:\masm>js 3+2 5 ...

  9. python中加减乘除_Python基础算法综合:加减乘除四则运算方法

    #!usr/bin/env python # -*- coding:utf-8 -*- #python的算法加减乘除用符号:+,-,*,/来表示 #以下全是python2.x写法,3.x以上请在pyt ...

  10. 只用位运算来实现整数的加减乘除四则运算

    首先回忆计算机组成原理学过的内容,数字在机器ALU运算逻辑单元内部是以补码形式进行运算的,因为补码有两个优势: 1.能做到符号位和数值部分一起运算,这样无需单独考虑符号. 2.能把减法运算转化为加法运 ...

最新文章

  1. numpy添加元素_科研速递 | 花费15年众望所归!NumPy论文终登上Nature!
  2. some SQL trace of pricing document generation
  3. Introducing the ClearGLASS App on ClearOS
  4. 会话管理-1.1.Cookie介绍
  5. shell命令locate
  6. ProcessOnLoading
  7. 非合作博弈篇——动作空间连续的博弈问题
  8. android开发手机字体大小设置,安卓代码动态设置字体大小
  9. 格式工厂kux格式怎么转换成mp4
  10. 世界各国与中国时差查询
  11. 如何在 Google 免费云端运行 Python 深度学习框架?
  12. 将输入金额转化为发票大写形式
  13. python- ASCII字符串转为16进制格式
  14. 码流 /码率 / 比特率
  15. 网络环路原理及其影响
  16. CSS3选择器(选择符)
  17. motoxt 1085 android8,Moto(Moto)X XT1085/全网通手机系统介绍评测-ZOL中关村在线
  18. 2021肇庆各中学高考成绩查询,广东肇庆4所高中,2020高考创佳绩,肇庆中学领跑,其他3所你可知...
  19. 【百问网智能家居5】ESP8266的相关知识
  20. PMP-项目整合管理的内容

热门文章

  1. MySql实战篇:写一个简单的存储过程,完成订单定时任务
  2. 1.Entity Framework Core 5.0教程,概述和准备
  3. json_decode 打印 null
  4. easyui省市二级联动
  5. OFFICE技术讲座:边框相邻时的处理
  6. 全网首发:sqlite-jdbc在UOS上弹窗提示的解决办法
  7. 围棋选手不到30岁就下坡,最大因素是什么?
  8. 文字处理:标点符号有哪些,场景,参考GB-T 15834-2011《标点符号用法》
  9. 同样是编译jogl,不同平台的编译速度相差几十倍?
  10. 小米发布会之文案错误:大哥你先处罚自己!再处罚相关高管!