位运算实现简单的加减乘除
所有的数据在计算机中都以二进制的形式存储,对二进制的运算叫做位运算,即符号位共同参与运算的运算。
基本形式:
& 与:仅当两个位都为1时,结果为1;
| 或 :两个位有一个位为1时,结果就为1,仅当两个位都为0时,结果为0;
~ 非 :位为0,结果为1,位为1,结果为0;
^ 异或:两个位相同为0,不同为1;
<< 左移:二进位全部左移若干位,高位丢弃,低位补0(因为十进制左移一位相当于乘10,所以二进制左移一位相当于十进制的乘2);
>> 右移:各二进位全部右移若干位,对无符号数,高位补0,对于有符号数,算数右移需要补1,逻辑右移需要补0;
利用位运算实现加减乘除:
代码如下:
public int aplusb(int a, int b) {// write your code here//1.判断加数是否为0;if (b==0) {return a;}//2.求出不考虑进位的得数int sum =a^b;//3.求出只考虑进位的得数int carry=(a&b)<<1;//递归return aplusb(sum, carry);}
public int minus(int a,int b){/*/计算机中并没有单独的设置一个减法器,而是通过转换刚才的加法器来实现减法而所谓的减法就是加一个负数,实现方案是取反加一*///1.调用加法器,加数转换为负数 ~:按位取反,int subtractor=aplusb(~b, 1);int result =aplusb(a, subtractor);return result;}
public int multiply(int a,int b){//去两个乘数的绝对值int multiplicand =a<0?aplusb(~a,1):a;int multiplier =b<0?aplusb(~b, 1):b;int result = 0;//对于乘法而言,不过就是加上多少次for (int i=0;i<multiplier;i++){result= aplusb(result, multiplicand);}//这里是判断结果的符号,负数不过是取反加一if ((a^b)<0){result=aplusb(~result, 1);return result;}return result;}
public int divide(int a,int b){/*相比于乘法,除法也不过是计算a-b减了几次罢了*/int dividend=a>0?a:aplusb(~a, 1);int divisor=b>0?b:aplusb(~b, 1);int i=0;while (divisor<=dividend){dividend=minus(dividend, divisor);i=aplusb(i, 1);}if ((a^b)<0){return aplusb(~i, 1);}return i;}
以上,借鉴的很多
位运算实现简单的加减乘除相关推荐
- 用位运算实现四则运算之加减乘除(用位运算求一个数的1/3)
听同学百度二面中,不准用四则运算操作符来实现四则运算.一想就想到了计算机组成原理上学过的.位运算的思想可以应用到很多地方,这里简单的总结一下用位运算来实现整数的四则运算. 加法运算: int AddW ...
- python写整数逆位运算_简单了解python的一些位运算技巧
前言 位运算的性能大家想必是清楚的,效率绝对高.相信爱好源码的同学,在学习阅读源码的过程中会发现不少源码使用了位运算.但是为啥在实际编程过程中应用少呢?想必最大的原因,是较为难懂.不过,在面试的过程中 ...
- UVALive 3351 Easy and Not Easy Sudoku Puzzles 位运算~判断简单数独
题意:给定一个9*9的数独,要求判断是否为简单数独. 数独:对于每一行每一列或者子方格内,只能填1~9这几个数,并且每个数字只能出现一次,比如说: 如果一个9*9的数独是简单数独的话,这个数独的解是独 ...
- 0位运算/数学简单 剑指 Offer 65. 不用加减乘除做加法
剑指 Offer 65. 不用加减乘除做加法 描述 写一个函数,求两个整数之和,要求在函数体内不得使用 "+"."-"."*"." ...
- 用位运算实现四则运算之加减乘除
转自:http://www.cnblogs.com/dandingyy/archive/2012/10/29/2745570.html ^: 按位异或:&:按位与: | :按位或 计算机系统中 ...
- 位运算一些简单的应用
从0开始数 1.把0x4f 的第3位变成0:~(1<<3) & 0x4f 转为二进制: 1001111 最终结果:-> 1000111 1110111 -> ...
- 位运算的简单应用,计算无符号的数中二进制位中值为 1 的个数
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string. ...
- 算法:位运算加减乘除
今日做leetCode的371题算法题,用位运算计算两个数之和.借此机会,将位运算的加减乘除做一整理. package Algorithm;public class Code371 {public s ...
- 位运算简介及实用技巧(一):基础篇
去年年底写的关于位运算的日志是这个Blog里少数大受欢迎的文章之一,很多人都希望我能不断完善那篇文章.后来我看到了不少其它的资料,学习到了更多关于位运算的知识,有了重新整理位运算技巧的想法.从今天起我 ...
最新文章
- phd or domain
- C语言#line预处理器
- HDU 4339 Query
- 随堂小测冲刺.第19天
- HTML 颜色值及脚本
- ACCESS_REFUSED - operation not permitted on the default exchange
- 骚操作 Python爬你要的网站数据
- postgres的brin索引
- Enzo高灵敏度检测——Arg8-Vasopressin ELISA kit
- web版收银系统,支持支付宝,微信扫描枪支付,数字输入
- 谈谈登录注册的如何实现
- Python爬虫项目整理
- 一套策划正确的网页配色方案
- NDK开发(四):仿QQ变声
- Ubuntu20.04设置开机自启脚本、开机自启命令(ubuntu自启,ubuntu开机自启)rc(run command)(systemd)(/etc/rc.local)(开机启动原理)开机自启动
- 智能家居混战再起,华为、海尔和小米谁能率先破局?
- tlm::tlm_analysis_port tlm::tlm_analysis_if
- 机器人运动学逆解中最常用的三角方程(附代码)
- iOS 边学边记 HLS协议 m3u8 ts详解
- Elastic App Search 快速构建 ES 应用