只用位运算实现整数的加减乘除运算
来源:互联网 发布:重庆金蝶软件 编辑:程序博客网 时间:2024/05/02 01:12
public class AddMinusMultiDivideByBit {/** * * 加法运算 * @param a * @param b * @return * */public static int add(int a, int b) {int result = 0;while(b != 0){result = a ^ b; // 无进位的相加之和, 其结果还差进位后的值b = (a&b)<<1;//a&b的结果是需要进位的位, 于是将其左移, 与无进位的和再次相加a = result;}return result;}// 两个数的减法运算, 例如a-b, 可以看成两个数的加法运算, 例如上例可改成a+(-b)// 问题转换成了如何求一个数的相反数,方法为:将其取反然后加一./** * 减法运算 * @param a * @param b * @return */public static int minus(int a, int b){return add(a, negNum(b));}/** * 取一个数的相反数 * @param b * @return */private static int negNum(int b) {return (~b + 1);}/** * 乘法运算 * 算法思想 * * a = 3 = 0011 * b = 5 = 0101 * 0011 * *0101 * ------------ * 0011 * 0000 * 0011 * 0000 * -------------- * 0001111 * * 其实二进制的乘法运算与十进制的乘法算法一样 * 乘法过程:如果乘数b的第i(i >= 0,i = 0是乘数最右侧的那一位)位为1, * 那么该位与被乘数a相乘的结果S[i]就是(a << i); * 然后将这些所有的结果S[i]相加即为最后结果 * @param a * @param b * @return * */public static int multi(int a, int b){int result = 0;while(b != 0){if((b&1) != 0){ // 看最右侧是否为1result = add(result, a);}a = a<<1;b = b>>1;}return result;}public static void main(String[] args) {int a = 3; int b = 5;System.out.println(add(a, b));System.out.println(minus(a, b));System.out.println(multi(a ,b));}}
0 0
- 只用位运算实现整数的加减乘除运算
- 只用位运算实现整数的加减乘除运算
- 只用位运算来实现整数的加减乘除四则运算
- 只用位运算来实现整数的加减乘除四则运算
- 只用位运算来实现整数的加减乘除四则运算 (转载,还没有来得及整理!!!!)
- 位运算实现整数的加减乘除
- 位运算实现整数加减乘除
- 位运算---只使用位运算实现整数的加减乘除
- 用位运算实现两个整数的加减乘除运算
- 用位运算实现两个整数的加减乘除运算
- 用位运算实现两个整数的加减乘除运算
- 用位运算实现整数的加减乘除运算
- 用位运算实现两个整数的加减乘除运算
- 用位运算实现两个整数的加减乘除运算
- 用位运算实现两个整数的加减乘除运算
- 用位运算实现两个整数的加减乘除运算
- 用位运算实现两个整数的加减乘除运算
- 用位运算实现两个整数的加减乘除运算
- Unity之资源导入
- SSM中spring运行中出现Cannot load JDBC driver class (spring的配置错误)
- 关于Cocos2d-x使用webView加载html视频问题
- think in java 浅谈 SerialNumberChecker+ SimpleMicroBenchmark+SynchronizationComparisons
- 程序员面试金典2——魔术索引2
- 只用位运算实现整数的加减乘除运算
- 数据结构之有序链表归并算法2
- hacking 麦步手表之(2)命令行编译工程
- 仿函数
- java中10大常见异常
- 补作业 第六次实验 项目3
- Stories 15-18
- Shell高级编程学习笔记(基础篇)
- popupWindows实现安卓底部选项弹窗并完成点击事件。