基本性质:1:~n=-(n+1),比如:~3=-4

2:获取整数n的二进制串中最后一个1:-n&n=~(n-1)&n

3:去掉整数n的二进制串中最后一个1:n&(n-1)

加法:(以下所有代码都是Java实现)

public static int add(int a,int b) {

int res=a;

int xor=a^b; // a^b得到原位和(相当于按位相加没有进位)

int forward=(a&b)<<1;//得到进位和 a&b:得到产生进位的地方 (a&b)<<1:进位后的值

if(forward!=0){//若进位和不为0,则递归求原位和+进位和

res=add(xor, forward);

}else{

res=xor;//若进位和为0,则此时原位和为所求和

}

return res;

}

减法:

public static int minus(int a,int b) {

int B=~(b-1); // 由上面基本性质 -b=+(-b),~(b-1)=-b ===>>> a-b=a+(-b)=a+(~(b-1)

return add(a, B);

}

乘法:

public static int multi(int a,int b){

/* 1011

* 1010

--------

10110 (1011<<1,相当于乘以0010)

1011000 (1011<<3,相当于乘以1000)

--------

1101110

*/

int i=0;

int res=0;

while(b!=0){//乘数为0则结束

//处理乘数当前位

if((b&1)==1){

res+=(a<

b=b>>1;

++i;//i记录当前位是第几位

}else{

b=b>>1;

++i;

}

}

return res;

}

除法:

public static int sub(int a,int b) {

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

int res=-1;

if(a

return 0;

}else{

res=sub(minus(a, b), b)+1;

}

return res;

}

测试代码:

public static void main(String args[]){

System.out.println("加法测试:"+add(10, 5));

System.out.println("减法测试:"+minus(10, 5));

System.out.println("乘法测试:"+multi(10, 5));

System.out.println("除法测试:"+sub(10, 5));

}

测试结果:

作者:|旧市拾荒|

java 减法 位运算,位运算-实现加减乘除相关推荐

  1. java符号位_java 位运算符号

    <道生一,一生二,二生三,三生万物>出自老子的<道德经>第四十二章.主要讲述了一.二.三这几个数字,并不把一.二.三看作具体的事物和具体数量.它们只是表示"道&quo ...

  2. 位运算实现简单的加减乘除

    所有的数据在计算机中都以二进制的形式存储,对二进制的运算叫做位运算,即符号位共同参与运算的运算. 基本形式: &  与:仅当两个位都为1时,结果为1: |   或 :两个位有一个位为1时,结果 ...

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

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

  4. Java二进制与或非运算,java逻辑运算与位运算

    逻辑运算又称布尔运算 布尔用数学方法研究逻辑问题,成功地建立了逻辑演算.他用等式表示判断,把推理看作等式的变换.这种变换的有效性不依赖人们对符号的解释,只依赖于符号的组合规律 . 学习数据结构知识总会 ...

  5. 【Java基础】Java基本数据类型与位运算

    1.赋值运算符 赋值使用操作符"=".它的意思是"取右边的值(即右值),把它复制给左边(即左值)".右值可以是任何 常数.变量或者表达式 (只要它能 生成 一个 ...

  6. 【FPGA】定点数 数据位宽 运算 位宽截取

    在FPGA中,经常使用定点数表示小数,在进行各种运算时,定点数的位宽会发生变化,并且需要在适当地时候对数据的位宽进行截取. 运算要求和引起的位宽变化 假设存在两个数A.B,假定A位宽为m,小数位宽为a ...

  7. 位移运算 java_java位运算位移运算

    位运算:位运算允许对整数中的单个比特进行操作.位运算会对连个操作数中对应的比特执行布尔代数运算,并产生一个结果. java中有3种位运算符:&(与) |(或) ^(异或) ~(非) 看例子说明 ...

  8. BMP格式知识之二:16位,24位,32位的BMP图片算法是如何运算的

    BMP格式知识之二:16位,24位,32位的BMP图片算法是如何运算的 原文:http://blog.csdn.net/qq445803843/article/details/46476433 这段代 ...

  9. 常用技巧 —— 位运算 —— 位运算基础

    [与运算] 与运算常用于二进制的取位操作,其用符号 & 表示,相同位的两个数字都为1,则为1,若有一个不为1,则为0. 例如:00101 & 11100 = 00100 其会将两个十进 ...

  10. 使用位运算(与运算)代替%操作

    使用位运算(&与运算)代替%操作 %运算为取余运算 由于我们知道位运算比较高效,在某些情况下,当b为2的n次方时,有如下替换公式: a % b = a & (b-1)(b=2^n) 即 ...

最新文章

  1. java学习笔记_Java学习笔记——第1篇
  2. 原理图、PCB和实物是如何对应起来的
  3. [转载]SQL Plus 一些使用技巧
  4. 计算机里什么文件无法删除,电脑上的文件删不掉怎么办
  5. 作者:朱扬勇,复旦大学计算机科学技术学院教授、学术委员会主任,上海市数据科学重点实验室主任。...
  6. 设计一个可以变换的c语言图案,关于图形和变换专题的数学试题
  7. centos7开启tcp6_centos中docker映射出来的端口被tcp6监听,而没有被tcp监听导致ip+端口无法进行访问...
  8. Ubuntu 18 LTS netplan 网络配置
  9. micropython固件编译_Micropython编译固件的操作步骤
  10. 优制网亮相“2016工业软件与制造业融合发展论坛”
  11. ones,zeros,size用法总结
  12. 伟大的个性化主页:6种服务可替代iGoogle
  13. android tf卡及u盘_一体化储存芯片(U 盘、SD卡、TF卡) NAND定义开发-U盘篇
  14. 【leetcode刷题班】贪心题目求解
  15. 《软件项目管理》复习知识点
  16. Hadoop3.x完全分布式运行模式配置
  17. [python] ​python-pinyin库
  18. usb gaghet hid 模拟鼠标键盘的绝对值描述
  19. STM8 fHSI和 fCPU分频
  20. 阿里内部资料,10W字总结JAVA面试题-Git篇

热门文章

  1. 聊聊 Service 命名与设计
  2. Django视图(二)
  3. 向MPEG创始人Leonardo Chiariglione提问
  4. TOP级CG行业云渲染服务的演进之路
  5. 感谢有你 WebRTCon 2018优秀出品人、讲师与志愿者
  6. 董海冰:2018风云再起 ,期待AV1、AI和AR
  7. Wireshark安装和基本使用
  8. LeetCode——DFS
  9. TencentOCR 斩获 ICDAR 2021 三项冠军
  10. ffmpeg 源码学习