• python之使用位运算符实现加法运算


    一哥们去笔试,回来后跟我说了一通面试题,其中有一道题让我很感兴趣:

    不使用+号实现加法运算

    刚听到后,一脸懵逼,不使用+号怎么算?

    问了朋友他也没做这题,不过仔细想了下,不使用+号,是否可以使用其他运算符?比如位运算符

    既然说到这,就看下位运算符有哪些,实现是什么:

    &---位与运算符,都为真时才真

    |---位或运算符,有一个为真时则真

    ^---位异或运算符,不同时为真时则真

    ~---位反运算符,取反

    <<---位左移运算符,向左移动N位

    >>---位右移运算符,向右移动N位

    上面这些是针对二进制来运算,针对加法运算,我们需要知道俩件事情:

    1、俩个数对应的二进制位相加应该有如下算法

    0+0=0

    0+1=1

    1+1=0

    1+0=1

    这个对应异或运算符^

    但这里又有个问题,这么向前进一位?这就是第二件事

    2、什么数相加需要进一位?

    算法如下:

    0+0=0

    0+1=0

    1+1=1

    1+0=0

    也就是在二进制下,当同时为1时需要进一位

    这个可以使用位运算符&,然后在向左移动一位即可实现

    这样1和2分别计算出了位相加和位移的结果,然后这俩个再通过位相加和位运算,直到不能位移了,最后位相加的数才是最后的俩个数相加的值。

    具体代码如下:

    def plusNoSignal(x,y):
        ex_or = x ^ y
        an_mo = (x & y)<<1
        while(an_mo):
            ex_or_temp = ex_or
            an_mo_temp = an_mo
            ex_or = ex_or_temp ^ an_mo_temp
            an_mo = (ex_or_temp & an_mo_temp)<<1
        return ex_or
    
    if __name__ = "__main__":
        input_numbers = input("please input two numbers separate by ',':")
        x = int(input_numbers.split(',')[0])
        y = int(input_numbers.split(',')[1])
        print(plusNoSignal(x,y))
    

      

  • 相关阅读:
    字符串Hash 学习笔记
    P4315 月下“毛景树” 题解
    page
    Equation
    Graph
    配置UOJ数据的正确姿势
    luogu2261余数求和题解--整除分块
    luogu2858奶牛零食题解--区间DP
    luogu1005矩阵取数游戏题解--区间DP
    luogu4677山区建小学题解--区间DP
  • 原文地址:https://www.cnblogs.com/watertaro/p/9480397.html
Copyright © 2020-2023  润新知