zoukankan      html  css  js  c++  java
  • 剑指Offer解题报告(Java版)——不用加减乘除做加法 47

       

    引言

       

    一般这种不能用四则运算的题都只有用位运算来做,目的是加强大家对计算机计算的理解,真是有点扯淡呢

       

    解决问题

       

    首先我们得思考计算机是怎样做加法的呢,比如34,如果转换成二进制是00110100,加起来是7,也就是0111,相当于是两个二进制的异或运算

       

    但是我们再举一个例子就是44,会发现,两个二进制是01000100,异或运算的话结果为0000,但是我们想要的是1000,这是因为异或运算没有考虑到进位的问题,看来我们还要用一个运算去考虑进位的问题,还记得进位是怎样算的吗,如果两个树相同位上都是1,那么就是要进位,这实际上就是与操作

       

    而最后我们需要把进位和没考虑进位的sum加起来,这里又不能用到sum,摔,此时我们又要用到之前讲的与和异或操作,这里我们取巧,就把sum赋值给n1,把carry赋值给n2,去算,停止的条件是n2==0,也就是没有进位了

       

    static int add(int n1,int n2){

    int sum=0;

    int carry=0;

    do {

    sum=n1^n2;

    carry=(n1&n2)<<1;

    n1=sum;

    n2=carry;

    } while (n2!=0);

    return sum;

  • 相关阅读:
    Linux部署之批量自动安装系统之NFS篇
    Linux部署之批量自动安装系统之DHCP篇
    solarwinds之网络发现
    solarwinds之数据库
    solarwind之安装
    DHCP服务器的搭建
    iSCSI服务器的搭建
    js强制限制输入允许两位小数
    html5中的Web Storage
    js点击复制
  • 原文地址:https://www.cnblogs.com/keedor/p/4474551.html
Copyright © 2011-2022 走看看