二进制实现加法_递归实现十进制转换二进制

二进制实现加法_递归实现十进制转换二进制一、原理1、化简先看一个例子:看一下3+4的加法运算3的二进制表示:0114的二进制表示:1003^4(3按位异或4)的结果是:111=>7上面的到的结果是

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、原理

  

  1、化简

    先看一个例子:
    看一下 3 + 4 的加法运算

    3 的二进制表示: 011
    4 的二进制表示: 100

    3^4 (3按位异或4)的结果是: 111 => 7
    上面的到的结果是就是 3 + 4 的实际结果

    再看一个例子:

    12 的二级制表示:  01100
    19 的二进制表示:  10011

    12^19 的结果是: 11111 => 31

    再看一个例子:
    13 的二进制表示:01101
    19 的二进制表示:10011

    13^19 的结果是: 11110 => 20

    通过上面的三个例子不难发现: 当二进制数的每一位加法中不发生进位时,按位异或的结果就是最终的加法结果,那么我需要做的就是将所有的加法操作最终都简化成没有进位的加法操作,最终的结果就是两个数按位异或的结果。

  2、怎么处理有进位的加法?

    拆分
      将两个数的加法拆分为 进位加法和不进位加法

    看一个例子:

    编号:1 2 3 4 5
        ————————
       1 0 0 1 1 => 19
      +  1 1 0 1 0 => 26
     ————————–

    先求只有不进位的两个位相加的值,编号为2、3、5这三位的加法不发生进位操作,需要进位的相加位数直接按照结果为0处理,得到的结果为

    编号:1 2 3 4 5

        ————————
          1 0 0 1 1
       + 1 1 0 1 0
         ————————
   不进位: 0 1 0 0 1

           进位两个位相加的值,编号为1、4这三位的加法会发生进位操作,不需要进位的直接按照结果0处理,得到的结果为:

      编号:1 2 3 4 5
          ————————
            1 0 0 1 1
         + 1 1 0 1 0
          ————————
      不进位:   0 1 0 0 1
      进   位: 1 0 0 1 0 0

    再将两个结果按位异或:
      不进位:0 0 1 0 0 1
      进    位:1 0 0 1 0 0
          ————————
           1 0 1 1 0 1 => 45

    由此可见可以将一个二进制加法拆分为有进位的位数相加结果 和 无进位的位数相加的结果最终按位异或

  3、递归

    再看一个例子

    编号:1 2 3 4 5
        ————————

          1 0 1 1 1 => 23
       + 1 1 0 1 1 => 27
        ————————

    不进位:   0 1 1 0 0 => 12
    进   位: 1 0 0 1 1 0 => 38

    通过一次相加得到的结果不能完全实现化简操作,所以需要递归地进行化简操作

    编号:1 2 3 4 5
        ————————

          1 0 1 1 1 => 23
       + 1 1 0 1 1 => 27
        ————————

   不进位: 0 0 1 1 0 0 => 12
      进    位:1 0 0 1 1 0 => 38
        ————————

    不进位:1 0 1 0 1 0 => 42
    进    位:0 0 1 0 0 0 => 8
        ————————

     不进位:1 0 0 0 1 0 => 34
     进    位:0 1 0 0 0 0 => 16
        ————————

    不进位:1 1 0 0 1 0 => 50
    进    位:0 0 0 0 0 0 => 0

    以上实例通过递归的方式可以得到最终的结果

二、位运算实现

  通过以上几个实例我们明白了如何通过二进制的几个步骤来实现任意整数的加法操作,现在我们需要把这件事情用位运算进行表示。

  位运算表示不进位加法:
    不进位加法其实就是一个异或操作
  位运算表示进位加法:
    进位加法其实就是一个与操作的结果左移一位

三、代码实现

  js实现:

function sum (a, b) {
    if (b===0) return a;
    return sum(a^b, (a&b)<<1)
}

  java实现:

  

public int sum(int a, int b) {
    if (b==0) return a;
    return sum(a^b, (a&b)<<1);
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168378.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • PHP内置服务器

    PHP内置服务器

    2021年10月17日
  • PID控制学习–原理(一)

    PID控制学习–原理(一)目录一、PID控制原理与程序流程1、过程控制2、PID调节各个单元的作用二、数字PID控制器1、模拟PID控制规律的离散化2、数字PID控制器的差分方程3、常见的控制方式4、PID算法的两种形式三、PID算法的程序流程1、增量型PID算法的程序流程2、位置型PID控制的程序流程3、程序流程四、标准PID算法的改进1、微分项的改进2、微分线…

  • intellij idea输出语句快捷键_常用快捷键大全图片

    intellij idea输出语句快捷键_常用快捷键大全图片其他的快捷键还有很多,象Ctrl+G(跳转到指定行)、Ctrl+F4(关闭当前编辑页面)、Ctrl+F(搜索)等等,这些快捷键由于是各个编辑器都会提供的,而且定义的键位也都差不多,就没什么可说的了;Alt+回车导入包,自动修正Ctrl+N 查找类Ctrl+Shift+N查找文件Ctrl+Alt+L 格式化代码Ctrl+Alt+O优化导入的类和包Alt+Ins

  • eplan激活码破解步骤win10【2021.7最新】

    (eplan激活码破解步骤win10)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~MLZP…

  • think in java一_Think in Java(一):Java基础「建议收藏」

    think in java一_Think in Java(一):Java基础「建议收藏」一.OOP的特点(1)万物皆为对象;(2)程序是对象的集合,他们通过发送信息来告诉彼此所要做的;(3)每个对象都有自己的由其他对象所构成的存储;(4)每个对象都拥有它的类型;(5)某一特定类型的对象都可以接收同样的消息;二.Java比C++简单?(1)Java有垃圾回收器,不用手动销毁对象;(2)Java使用单根继承;(3)Java只能以一种方式创建对象(在堆上创建);三….

  • 软件开发视频资源分享[通俗易懂]

    软件开发视频资源分享[通俗易懂]资源分享资源均来源于网络,在自学/开公众号的时候收集而来。如果侵权请联系我,会第一时间删除。如果链接已失效(我也无办法,很多链接我是没有保存在自已的网盘中的,见谅)。Java基础Java马士兵:链接:https://pan.baidu.com/s/1jJRvxGi密码:v3xbJava毕向东:可以到往B站找,已上传到B站Java刘意:链接:https://pan.bai…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号