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

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

  前言
  本文主要介绍如何使用位运算来实现加减功能,也就是在整个运算过程中不能出现加减符号。
  加减乘除运算在计算机中,实际上都是用位运算实现的,今天就用位运算来模拟下加法和减法的运算功能。思路分析
  先分析如何用位运算实现加法运算。示例
  假设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

哈萨克斯坦驻华大使哈中关系堪称典范2022年10月28日,鉴于中国社会对哈萨克斯坦正在进行的政治和经济改革以及哈萨克斯坦外交活动的广泛兴趣,哈萨克斯坦驻华大使馆为中国主要媒体组织了大型新闻发布会。图源哈萨克斯坦驻华广西老汉梁二娶19岁娇妻,21年连生15子,走红网络后现月入过万如果您觉得我们的这篇文章给你带来不错的阅读体验,请点击右上方的关注,感谢您的支持和鼓励,我们将持续给您带来优质的内容。多子多福作为民族传统观念,可谓源远流长,在古代人的观念里,儿子1折机票来了!国内新开超400条航线从10月30日至明年3月25日,中国民航将执行新的冬春航季航班计划,新航季国内新开航线超400条,主要涉及包头揭阳阿克苏德宏鄂尔多斯等机场与大连杭州昆明深圳重庆等机场间的航线。新航江西联通总经理周智共创VR产业新未来视频加载中今天的牵手英雄城,点亮元宇宙专栏,让我们对话中国联通江西省分公司总经理周智,听听他对2022世界VR产业大会有什么好的意见和建议。元宇宙是融合了虚拟现实人工智能云计算区块四大行三季报出炉!3家前三季新增信贷超2万亿,建行净利增速最快工行逾期不良剪刀差连续10季度为负点蓝字关注,不迷路10月28日,四大国有银行三季报纷纷出炉。从营收来看,宇宙行工商银行前9个月实现营收7113。92亿元,同比微降0。1紧随其后的建设银行农业银行中国银行分别实现营纪实文学与混凝土共舞编者按2019年,陈君辉和李俊鸿获得第45届世界技能大赛混凝土项目金牌。广东作家许锋以他们的故事为原型,创作纪实文学与混凝土共舞。与混凝土共舞文许锋一hr我第一次近距离端详和触摸尚西部创业2022年前三季度净利润2。27亿元同比增长16。19中证智能财讯西部创业(000557)10月28日披露2022年第三季度报告。2022年前三季度,公司实现营业总收入16。34亿元,同比增长103。32归母净利润2。27亿元,同比增乐歌股份2022年前三季度净利润1。58亿元同比增长28。12中证智能财讯乐歌股份(300729)10月28日披露2022年第三季度报告。2022年前三季度,公司实现营业总收入23。12亿元,同比增长10。10归母净利润1。58亿元,同比增长国科微2022年前三季度净利润1。18亿元同比下降34。91中证智能财讯国科微(300672)10月28日披露2022年第三季度报告。2022年前三季度,公司实现营业总收入29。15亿元,同比增长55。36归母净利润1。18亿元,同比下降3国知局114条举措强化知产保护,透露年底出台跨境电商指南10月28日,国家知识产权局官网发布深入实施关于强化知识产权保护的意见推进计划,围绕提高法治化水平强化全链条保护深化体制机制改革等6大方面提出114条举措,明晰知识产权保护工作的推广西男子中奖两个亿,为什么选择不告诉老婆孩子?10月20日,广西男子出门办事,路过宾阳县一家百货大楼的彩票站时,随手买了160元的双色球,竟然锦鲤附身中了2。19亿大奖。天降横财,男子激动得彻夜未眠,熬到早上独自乘车到南宁一家
海浪阳光沙滩,海南环岛摩旅的路上缺一不可这一次,全部安排旅行第一天的疲惫,被清晨的阳光和饥肠辘辘叫醒。DAY1结束后入住了万宁兴隆的康乐园温泉酒店对于摩托车旅行者来说特别友好,因为是别墅酒店,可以放心的把摩托放在门口。早唐十八陵,千百年来,有谁曾经与这些陵山有过交集?一座一座的靠近,一座一座的登临,一座一座尽其所能的感受和思考若干个日子,我们缓行慢吟在关中平原北部绵长的乔山山脉上,寻找那些古远的大墓唐十八陵。1hr十八唐陵,到底是皇家法度,大多把教育异化成生意,智慧班在宣扬什么价值观?来源中国经济网新闻背景近日,新华视点记者随国务院第九次大督查第一督查组在山西省调研发现,当地多所学校以是否购买平板电脑为标准划分智慧班和普通班。进入智慧班,需一次性缴纳课程资源费平CircleLinux8。6发布(CentOS8停服不愁啦)欢迎来到CircleLinux社区!我们宣布正式发行X8664AArch64和PowerPC架构的CircleLinux8。6版本。此发行版是社区每个成员这几个月共同辛勤劳作的结晶柳传志入选中小学生课本,成为诚信守时教育典范,这个合适吗?柳传志据头条某网友爆料联想创始人柳传志入选福建省中小学生诚信教育一年级课本,而且是头篇,题目是守时的柳传志,大意是联想集团董事局主席柳传志是一位非常守时的人,参加活动几乎没有迟到过和燃油车一对比,新能源汽车简直不要太香我有两辆车,一辆是燃油车一辆是纯电动。都是大众品牌,一辆在15万左右,一辆在30万左右,都属于平民级的车型,比较具有一定的代表性。我的工作是美容市场调查,用车时候比较多,所依平时两油价新调整,今日加油站92号95号汽油售价表,干货回复粉丝留言今天周六,国内油价休市,维持周五的价格。预测上涨幅度为235元吨,折算下来上涨0。18元升,调整时间为下周二(2022年9月6日)晚24点,周末赶紧提前加油!下是编整理的近一周粉丝中西部地区出口贸易四强!四川成为龙头,江西高居第二近四十年来,我国的出口贸易有了翻天覆地的进步,也带动了各行各业的发展。作为对外开放的重要载体,我国的出口贸易由小到大,由弱变强,取得了令人瞩目的成就。不过最近几年,我国的出口贸易面不确定因素占主导地位油价大幅波动或加速经济衰退在业内人士普遍看好后市,认为今年下半年国际原油价格将一路高歌猛进时,油价却掉头向下,短短两个月跌去30。油价大起大落,一定程度上反映了当前世界经济的现状不确定因素占主导地位,未来难摇钱树最终幻想14让SquareEnix在不断下滑的财务业绩中生存最终幻想14(FF14)仍然是SquareEnix的宠儿,因为该公司在其最新报告中宣布了不断下滑的财务业绩。而最终幻想14功不可没。上一财季(46月)净销售额为748亿日元,比去年喝咖啡上瘾吗?喝咖啡有什么作用?关于喝咖啡的4个问题,多了解在中国很多人都会喜欢喝一种饮品,那就是咖啡,尤其是一些白领阶层,咖啡简直成为了他们的续命神器。在2021中国咖啡行业发展白皮书的数据中显示,在中国的一些一线城市,喝咖啡的人数达到了