【数据结构与算法】实现四则运算
来源:互联网 发布:sql 删除表 编辑:程序博客网 时间:2024/05/02 00:20
对数字的运算除了加减乘除外,也只有位操作了。
常见的位操作实现
- 常用的一个等式:-n = ~(n - 1) = ~n + 1
- 获取整数的二进制的最右边的1:n & (-n) 或 n & ~(n - 1)。例如 n = 010100, -n = 101100,那么n & (-n) = 000100
- 去除整数的二进制的最右边的1:n & (n - 1)。例如 n = 010100,n-1 = 010011,n&(n-1) = 010000
一、加法
模拟二制任加法,将加法的结果分为不进位的相加结果和相加产生的进位两部分。
public static int add(int a,int b){ while(b!=0){ int noCarrayAdd=a^b; b=(a&b)<<1; //b是进位部分 a=noCarrayAdd; //a是不进位相加结果 } return a; }
二、减法
有符号整数在计算机内都是用补码存储的。
[x-y]补=[x]补-[y]补=[x]补+[-y]补
[-y]补=~[y]补+1
public static int getNegative(int a){ return add(~a,1); } public static int sub(int a,int b){ return add(a,getNegative(b)); }
三、乘法
先看十进制数的乘法,考虑a与b相乘,b有n位。那么a*b=a*b[1]+(a*b[2])*10+(a*b[3])*10^2……+(a*b[n])*10^(n-1)=a*b[1]+(a*10)*b[2]+(a*10^2)*b[3]+……+(a*10^(n-1))*b[n]。
这个规律在二进制中同样适用,而且可以化简。因为b[i]只有0或1两种情况,当b[i]=0时,累加和不变,当b[i]=1时,加上a*2^(i-1)即可,而a*2^(i-1)在二进制中可以通过左移来实现。
public static int multipy(int a,int b){ int sum=0; while(b!=0){ if((b&1)==1){ sum=add(sum,a); } a=a<<1; b=b>>>1; //这里不能用循环右移>>,因为b有可能是负数 } return sum; }
四、除法
这个方法是从用位移实现整数除法看到的,暂时还没太看懂。
public static int[] divide(int numerator, int denominator) { boolean quotientFlag=true; boolean modFlag=true; if(numerator<0) { numerator=getNegative(numerator); quotientFlag=false; modFlag=false; } if(denominator<0){ denominator=getNegative(denominator); quotientFlag=!quotientFlag; } int mask = 0x1; int quotient = 0; while (denominator <= numerator) { denominator <<= 1; mask <<= 1; } while (mask > 1) { denominator >>= 1; mask >>= 1; if (numerator >= denominator) { numerator = sub(numerator,denominator); quotient |= mask; } } int[] result=new int[2]; result[0]=quotientFlag?quotient:getNegative(quotient); result[1]=modFlag?numerator:getNegative(numerator); return result; }
0 0
- 【数据结构与算法】实现四则运算
- 算法实战5:多种数据结构实现四则运算
- 数据结构栈实现四则运算
- [数据结构与算法] 5,栈的应用-四则运算表达式求值
- 算法与数据结构学习之——大数字四则运算
- 数据结构,C语言实现四则运算
- 大整数四则运算算法与实现(C++)
- 数据结构(四)java模拟计算器四则运算算法
- 数据结构与算法 python实现
- 数据结构与算法,C++实现
- 四则运算 (数据结构)
- 数据结构:四则运算
- [数据结构与算法]BF算法与KMP算法实现
- 用java实现简单四则运算的算法
- 算法题/位操作实现四则运算
- 数据结构与算法(C#实现)系列-----前言
- 数据结构与算法(C#实现) [ 来自:CSDN ]
- 数据结构与算法(C#实现)系列
- web.xml配置中的log4jRefreshInterval讲解
- IOS合成多个视频和音频文件时闪退
- strncat用法
- iOS开源项目周报1229
- 求以log2为底的对数值
- 【数据结构与算法】实现四则运算
- STM32L1学习笔记03 了解STM32CubeL1
- RabbitMQ 发送消息 确认消息 是否 发送成功
- 调用 android 系统拍照结合 android-crop 裁剪图片
- APNS 学习总结(四)
- 如何在项目中应用数字签名技术
- iOS crash报告问题
- 腾讯第一“伪娘” 他是最会化妆的IT男
- 设计模式(1)观察者模式简单理解