一、加法

a+b

举例实现:13+9=22

13+9不考虑进位结果为12

只考虑进位结果为10

和刚好是22。

13二进制为1101,9二进制为1001。

不考虑进位结果为0100。算式为a^b

只考虑进位结果为10010。算式为(a&b)<< 1

然后它俩继续进行运算,直到进位为0。

算法实现:

1 //两种方式:2 //1、递归形式实现

3 int add(int a ,intb){4 if (b == 0)5 returna;6 else{7 //进位值

8 int carry = (a & b) << 1;9 a = a ^b;10 returnadd(a,carry);11 }12 }13

14 //非递归形式实现

15 int add2(int a ,intb){16 //进位值

17 intcarry;18 while (b != 0){19 carry = (a & b) << 1;20 a = a ^b;21 b =carry;22 }23 returna;24 }

二、减法

a-b

先来证明一个等式。Java负数存储是以补码形式存储的(补码=反码+1)。所以反码=补码-1.即~n=-n-1=-(n+1)

所以a-b可以化简为a+(-b)=a+~b+1

算法实现:

1 //减法实现 a+(-b)=a+~b+1

2 int subtraction(int a ,intb){3 b = ~b+1;4 return this.add(a,b);5 }

三、乘法

a*b

举例说明:

可以看到,二进制乘法的原理是:从乘数的低位到高位,遇到1并且这个1在乘数的右起第i(i从0开始数)位,那么就把被乘数左移i位得到 temp_i 。直到乘数中的1遍历完后,把根据各位1而得到的被乘数的左移值们 temp_i 相加起来即得乘法结果。那么根据这个原理,可以得到实现代码:这里要点为:用i记录当前遍历的乘数位,当前位为1则被乘数左移i位并加到和中,同时i++处理下一位;为0则乘数右移,i++,处理下一位......直到乘数==0说明乘数中的1遍历完了。此时把和返回即可。

算法实现:

1 //乘法实现2 //a 被乘数,b 乘数

3 int multiplication(int a,intb){4 int i = 0;5 int res = 0;6 //乘数不为0

7 while (b != 0){8 //处理当前位9 //当前位是1

10 if ((b & 1) == 1){11 res += (a <> 1;13 //记录当前是第几位

14 i++;15 }else{16 //当前位是0

17 b = b >> 1;18 i++;19 }20 }21 returnres;22 }

四、除法

a/b

除法的意义就在于:求a可以由多少个b组成。那么由此我们可得除法的实现:求a能减去多少个b,做减法的次数就是除法的商。

1 //除法实现

2 int division(int a,intb){3 intres;4 if(a

五、测试用例

1 packagebitOperation;2

3 /**

4 *@authorzsh5 * @company wlgzs6 * @create 2019-02-15 9:467 * @Describe 位运算实现加减乘除操作8 */

9 public classTest {10 //两种方式:11 //1、递归形式实现

12 int add(int a ,intb){13 if (b == 0)14 returna;15 else{16 //进位值

17 int carry = (a & b) << 1;18 a = a ^b;19 returnadd(a,carry);20 }21 }22

23 //非递归形式实现

24 int add2(int a ,intb){25 //进位值

26 intcarry;27 while (b != 0){28 carry = (a & b) << 1;29 a = a ^b;30 b =carry;31 }32 returna;33 }34

35 //减法实现 a+(-b)=a+~b+1

36 int subtraction(int a ,intb){37 b = ~b+1;38 return this.add(a,b);39 }40

41 //乘法实现42 //a 被乘数,b 乘数

43 int multiplication(int a,intb){44 int i = 0;45 int res = 0;46 //乘数不为0

47 while (b != 0){48 //处理当前位49 //当前位是1

50 if ((b & 1) == 1){51 res += (a <> 1;53 //记录当前是第几位

54 i++;55 }else{56 //当前位是0

57 b = b >> 1;58 i++;59 }60 }61 returnres;62 }63

64 //除法实现

65 int division(int a,intb){66 intres;67 if(a

75 public static voidmain(String[] args) {76 System.out.println(new Test().add(100,8));77 System.out.println(new Test().subtraction(100,8));78 System.out.println(new Test().multiplication(-3,3));79 System.out.println(new Test().division(100,3));80 }81 }

java加减_Java位运算实现加减乘除相关推荐

  1. java加减两个运算的代码_java加减乘除运算代码

    package demo; import java.util.Stack; /** * 利用栈,进行四则运算的类 * 用两个栈来实现算符优先,一个栈用来保存需要计算的数据 numStack,一个用来保 ...

  2. java转置矩阵相乘_java实现矩阵的加-减-乘-转置运算

    <java实现矩阵的加-减-乘-转置运算>由会员分享,可在线阅读,更多相关<java实现矩阵的加-减-乘-转置运算(3页珍藏版)>请在人人文库网上搜索. 1.import ja ...

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

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

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

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

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

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

  6. Java整形位运算避免精度缺失,中国大学MOOC: 在Java语句中,位运算操作数只能为整型或______数据。...

    中国大学MOOC: 在Java语句中,位运算操作数只能为整型或______数据. 答:字符型 YEAR(date)函数返回值的数据类型是 答:int 青色食物应 木,红色食物应 火,黄色食物应 土,白 ...

  7. 数学问题——位运算实现加减乘除

    ##位运算实现加减乘除 ###位运算实现加法 public static int add(int a, int b) {int sum = a;while (b != 0) {//不断的相加,直到没有 ...

  8. java 加减运算_JAVA日期加减运算 | 学步园

    1.用java.util.Calender来实现 Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()); Sys ...

  9. java 时分秒加减_JAVA日期加减运算

    public static Date getBeforeMonth(Date date,int months) { Calendar calendar = Calendar.getInstance() ...

最新文章

  1. 从QQ聊天看51CTO版主专业精神和工作态度!
  2. c语言程序设计运算符及表达式,c语言程序设计3第3章运算符和表达式
  3. 【错误记录】Groovy 注入方法报错 ( Cannot add new method [hello] for arguments [[]]. It already exists )
  4. 修改 class_带你探索JVM的Class文件结构
  5. python右对齐格式化输出_python笔记-格式化输出(%和format的用法)
  6. 语言坐标度分秒的换算_测量位置度说明
  7. 分压式静态工作点稳定电路
  8. RabbitMQ中BasicGet与BasicConsume的区别
  9. python找到两个有序列表的中位数
  10. 企业数据治理及在美团的最佳实践
  11. java冒泡排序及面向对象基本概念
  12. firefox android手势,6款Firefox鼠标手势扩展推荐
  13. 形而上认识进程间通信
  14. ⅰsee是什么意思_see是什么意思?
  15. 华为hana服务器型号齐全,华为宣布工业服务器通过SAP HANA认证
  16. shiro框架---shiro配置介绍(一)
  17. 很有意思的十句话,说说背后的故事。
  18. 测视力距离5米还是3米_3米视力表,5米视力表和3米的有什么不同吗?得出来的结果有什......
  19. python入门小程序:霍兰德人格分析
  20. 半小时速通【页面数据分页】

热门文章

  1. 矩阵分析与多元统计II 二次型与二次曲面1 线性函数与对偶空间
  2. 如何合并报表简单快速?
  3. 南昌治疗糖尿病的医院
  4. 川大计算机考研调剂外校,一志愿川大 考研调剂经验贴
  5. Web服务器控件和HTML控件区别
  6. 简易计算器+组合和内部
  7. 国际人工智能泰斗—迈克尔·乔丹
  8. 关闭QQ2007迷你首页 还清净系统
  9. 防抄板芯片,加密芯片,版权保护芯片,模块的原理与控制
  10. 腾讯天御、防水墙联合InMobi发布《2020中国移动广告反欺诈白皮书》