范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

算法如何用位运算实现加减运算?

  前言
  本文主要介绍如何使用位运算来实现加减功能,也就是在整个运算过程中不能出现加减符号。
  加减乘除运算在计算机中,实际上都是用位运算实现的,今天就用位运算来模拟下加法和减法的运算功能。思路分析
  先分析如何用位运算实现加法运算。示例
  假设a=23,b=36,使用位运算实现加法得到结果59。
  首先来看下23、36、59的二进制信息。
  从上面的图中可以看到,两个数相加的结果与两个数异或的结果很相似,只不过在图中的2位置相加的时候,产生了进位,而异或是没有进位的,如果能拿到进位信息,把两个数异或的结果和进位信息的结果相加就能得到最终结果了,那么如果能拿到进位信息呢?位运算进位
  上图中,59的二进制信息可以分为两部分,0110011 和 0001000,再结合23、36的二进制信息来看,0110011为23和36的异或结果,而23和36相与的结果跟0001000很相似,只不过0001000中的1比相与结果往前移了一位。
  于是,我们可以得出,两个数的二进制进位信息为两个数的相与在左移一位。初步结果
  经过上面的分析,我们可以得到了一个初步的运算结果,即两个数相加等于两个数异或加上两个数的相与左移1位,也就是a + b = (a ^ b) + ((a & b) << 1)。
  先用23和36来验证下。
  经过验证可以看到,刚才得出的结论是正确的。
  但是,我们要做到在整个运算过程中不能出现加号,接下来要想办法把这个加号给去掉。去除加号
  还是以23和36为例,经过上面的运算我们把运算的位运算结果给化简下。
  23 + 36 = (23 ^ 36) + ((23 & 36) << 1) = 51 + 8
  也就是把23和36的相加运算转化为了51和8的相加运算,接下来继续分析51和8的相加运算,也是通过异或和相与进行操作。
  51 + 8 = (51 ^ 8) + ((51 & 8) << 1) = 59 + 0
  嗯?可以发现我们已经得出59了,而且还加了个0,加了个0不就相当于加了个寂寞嘛,可以直接省略啊。
  由此,我们又可以得出一个结论,两个数的二进制进位信息为两个数的相与在左移一位,不停地循环这个过程,直到有一个数变为0,就能得到结果。整体思路
  现在来总结下整体的计算过程:把两个数相加,拆分成两步,两个数异或加上两个数相与左移1位。判断相与左移的结果是否为0。如果相与左移为0,两个数异或的结果即为相加的结果。如果相与左移结果不为0,把得到的新结果,重复执行第1~3步操作。加法代码实现
  经过上面的分析,来看下代码实现。public class Code19_Add {    public static int add(int a, int b) {        int sum = 0;        while (b != 0) {            sum = a ^ b;            b = (a & b) << 1;            a = sum;        }        return sum;    }     public static void main(String[] args) {         int sum = add(23, 36);         System.out.println(sum);     } } 复制代码
  运行程序,输出结果为59。减法实现减法分析
  还是以23和36为例,如果要计算 36 - 23,该怎么办?
  36 - 23 不就相当于36 + (-23),可以理解为加上一个负数,这就可以了吗?不不不,要求的是不能出现加减符号,-23里面是有减法这个符号的。
  还记得前面我们分析的负数可以怎么表示吗?对了,负数是对一个数的取反再加1。嗯?又出现加号了,不过加法我们不是已经实现了吗?直接拿来用就好了。减法代码实现
  有了加法操作,减法就很简单了,来看下代码。public class Code20_Sub {     public static int add(int a, int b) {         int sum = 0;         while (b != 0) {             sum = a ^ b;             b = (a & b) << 1;             a = sum;         }         return sum;     }     public static int sub(int a, int b) {         return add(a, add(~b, 1));     }     public static void main(String[] args) {         int sum = sub(36, 23);         System.out.println(sum);     } } 复制代码
  运行一下输出结果为13。
  嗯,Perfect!
  总结
  本文主要介绍如何使用位运算来实现加减功能,至此功能都已经实现了。
  那么问题来了,我们实现的加减运算与Java本身的加减相比,谁的效率更高呢?当然是Java中的更高了,因为我们是用Java实现的,代码运行后,要经过层层的翻译才能到达底层,所以效率肯定是有损失的。
  当然我们的目的是熟悉位运算的操作,这个才是最重要的。
  原文链接:https://juejin.cn/post/7183115929226575928

为什么有些老人宁愿在农村受苦,也不愿意到城市享福?现在老一辈的基本不喜欢待城里反而喜欢喜欢农村生活!有以下几点1。生活习惯不一样,老一辈的人思想还停留在6070年代,总以为劳动最光荣,每天真是不干点什么活心里不舒服一样,主要是他们2010年的泸州老窖现在值多少钱?我觉得不值什么钱,虽然说2010年的泸州老窖距离现在有11年了,但是2010年的酒其实没什么收藏价值了。收酒的地方2010年的泸州老窖如果是特曲,应该也就300左右吧。看你的酒是泸营口好吃的小吃有哪些?海蜇鲅鱼圈的海蜇可是出了名的味美鲜香,在辽宁地区乃至全国都闻名遐迩,每到67月份海蜇的开捕收获时节,各个海湾渔村都是盛况空前。丰富的海蜇资源不仅为区内渔民带了丰厚的收入,更带动了不石家庄出发想自驾游三天,有哪些地方什么路线值得推荐?石家庄出发自驾游三天的时间,按照大部分人常规自驾游的规划方法来看,三天时间往返行驶的公里数不能太多了,建议应该控制在1000公里左右,最多别超过1300公里,因为如果路上行驶里程数一家人从福州自驾去平潭玩两天,有哪些推荐的地方?平潭素有千礁岛县之称,由于地质构造和海水侵蚀的影响,发育众多奇特壮观的海蚀地貌形态,既有平坦宽阔的海滨沙滩,又有数不胜数的象形奇异岩石。湖海沙石相映成趣,奇幽险俏引人入胜,构成独具秦腔梅花奖获得者有哪些人?中国戏剧梅花奖是中国戏剧表演艺术最高奖,始创于1983年,2007年更名为中国戏剧奖梅花表演奖,是中国戏剧奖的子奖项之一,也是中国戏剧界优秀中青年演员的最高奖项。从1984年第一届如果教师取消职称,工资与什么挂钩最合理,并且也能提高教师的积极性?一部分网友发起对教师职称的讨论,有的认为教师职称与工资挂钩不合理,要求取消职称。就目前教师职称改革的方向来看,取消教师职称是不现实的。假如取消职称,教师工资该如何来核定?又怎样才能你们知道下巴为什么会长痘吗?因为脑瓜子太重,压的,哪里有压迫哪里就有反抗呲牙呲牙精神紧张精神压力大容易内分泌失调,激素分泌紊乱,从而引起下巴长痘。脸部清洁不彻底分泌能力旺盛,若油脂清洁不净,容易导致毛囊口皮脂基础教育在编教师比大机构教师工资低,为什么他们不辞职?我是高中教师,我的妹妹在校外辅导机构任职,我来认真回答这个问题。首先我和妹妹没有利益关系,我在山西他在北京,清清白白。为什么在编教师不辞职?要知道,对于有正式工作的人来说,辞职是件白色连衣长裙搭什么才显得时尚优雅?夏天是穿连衣裙的季节,连衣裙的款式非常多,除了款式还有一个非常重要的指标要参考,就是面料。雪纺是夏季连衣裙常用的面料,其次轻薄型的针织面料也不错,特别适合气质温柔型的女生穿着。比如达内和黑马程序员哪家培训机构好?本人10年开发培训经验,期间经历了Java,Android,H5,大数据,PHP等多个不同的方向的开发,也做过软件培训公司的金牌讲师,很有兴趣回答你这个问题。如果题主非要在这两者之
治愈自己的生活我的生活也是头条在头条经常看到一些和自己年龄相仿的姐妹,诉说着自己的婚姻不幸以及离异后困难重重的人生。虽然文章不是很精彩,语句也不是很精辟,但是诉说的却是句句现实版实锤。特别有个别。生日感悟天落祥云,令吾今生知智愚钝,落宠于身母怕我饿,父恐吾冷姊令我乐,弟护吾全乍暖还寒之季,稚子求学之时戏不尽天下之娱乐,仿不完天下之学识经于城中大河间跃动,常于高山美景中沉思。我们因爱我终于失去了你头条创作挑战赛我拿你的誓言,和时间做了一场赌注,现在时间依旧,你的誓言血本无归。图源网络总认为世间万物不断更迭,只有时间不老,但总有什么不会轻易改变,比如你的誓言,我的一往情深。都日韩陷入重度内卷化,我们呢?这几天接待了一位从外地回来的好友,闲聊起几年前结伴同行,去日韩旅行的经历,感慨良多记得当时我们的旅行团乘坐大巴去当地免税店消费,远远的就看到店门口整齐站了两排西装革履的年轻人,已经老电影中的城市风光,找寻回忆里原汁原味的青岛兔年的春节假期已经结束,春节就这样过去了。许多人一定会感觉它走得太快了。七天一晃而过,城市档案论坛公众号也陪伴大家度过了一个愉快难忘的春节假期!新一年的工作开始了,祝愿所有的朋友们今天的中国,正如先烈们所愿徒步苏州河之3初六下午,艳阳高照,气温4左右,我们继续沿苏州河徒步3。8公里,起点为苏州河北岸的汉中路地铁站,终点为苏州河山西路桥下,在南京东路地铁站乘2号线返回。徒步中途径著名的淞沪会战主战场灯火里的大同世界舞动新春灯火世界观古都灯会,赏天下大同欢天喜地中国年,大同蓝,古都韵,华彩灯。大同地处山西北部,与内蒙古河北交界,古称云中平城,在历史上一直是北方的中心城市,素有三代京华,两朝重镇洛阳白云山,值得在这个冬季相约而赴登临白云之巅,一览云海起伏,山间薄雾弥漫,山峰与奇松在白雪覆盖下银装素裹,宛如仙境。白雪皑皑晶莹剔透,美成这样的白云山,值得在这个冬季相约而赴。图说白云山的雪来源网络白云山位于河南露营垂钓好帮手,试驾山海炮3。0TV6在绝大多数情况下,你最棒的卧室天花板就是开阔的夜空。随着露营文化的持续火爆,越来越多消费者开始探寻更多的户外文化。不管是露营徒步还是登山垂钓,这些户外运动装备也在近两年变得备受关注不来宁夏不知道沙漠中的诗和远方来源人民网说起沙漠,人们总会想起戈壁一望无际的撒哈拉或者是那驼队商旅中传来的阵阵驼铃,却不知在塞上江南也隐藏着许多绝美的沙漠风情。不来宁夏不知道,宁夏中卫市,曾是座黄沙笼罩下的城市游东山寺记(仿王安石游褒禅山记)癸卯之始,大年初三,吾驱车四十二里,游大鹏新区。大鹏有一山,名曰东山,海拔百余米,山脉逶迤。山脊少树木,常年不生草,形似巨龙,亦名曰龙头山。山麓有一寺,门前为小路,宽不过数米,或有