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))
python之使用位运算符实现加法运算的更多相关文章
- java 位运算符 以及加法 交换两个变量值
先给出十转二的除法 2 60 30 0 15 0 7 1 3 1 1 1 0 1 60转二 111100 再介绍位运算符 a=60 b=13 A = 0011 1100 B ...
- python中的位运算符
按位运算符是把数字看作二进制来进行计算的.Python中的按位运算法则如下,下表中变量 a 为 60,b 为 13,二进制格式如下: a = 0011 1100 b = 0000 1101 ----- ...
- Python 基础1 - 位运算符
引言 本文主要介绍位运算符,实际上Python有以下7类运算符: [赋值运算符].[比较运算符].[算术运算符].[逻辑运算符].[身份运算符].[成员运算符].[位运算符] 位运算符 按位运算符是把 ...
- Java中的位运算符、移位运算
一.位运算 Java中有4个位运算,它们的运算规则如下: (1)按位与 (&) :两位全为1,结果为1,否则为0: (2)按位或 (|) :两位有一个为1,结果为1,否则为0: (3) ...
- 分享:Python中的位运算符
按位运算符是把数字看作二进制来进行计算的.用的不太多,简单了解. 下表中变量 a 为 60,b 为 13二进制格式如下: a = 0011 1100 b = 0000 1101 a&b = 0 ...
- Java的位运算符——&0xFF的运算与讲解
快放元旦假,没心思做啥的事,就去翻以前的代码遇到这句,但是又不懂,所以只好上网找,终于懂了那么一点点. 所以那个大神看到我说的有问题,请指出!谢谢.... 一:首先区分一下 A~F的意思先 A,代表十 ...
- Python基础学习---位运算符
<< 左移,每移动1位,相当于乘以2 例如:32<<2 等价于:32*4 ==128 >> 右移,每移动1位,相当于除以2 例如: ...
- 23.Python位运算符详解
位运算符通常在图形.图像处理和创建设备驱动等底层开发中使用.使用位运算符可以直接操作数值的原始 bit 位,尤其是在使用自定义的协议进行通信时,使用位运算符对原始数据进行编码和解码也非常有效. 位运算 ...
- 如何使用Python实现图像融合及加法运算?
摘要:本篇文章主要讲解Python调用OpenCV实现图像融合及加法运算,包括三部分知识:图像融合.图像加法运算.图像类型转换. 本文分享自华为云社区<[Python图像处理] 五.图像融合.加 ...
随机推荐
- 分享一个mac for redis-desktop-manager破解版安装包
链接: https://pan.baidu.com/s/1BDndGmBlWoSr4hVLpF3FVw 提取码: wwir
- Python 3.6安装yaml时报"AttributeError: module 'pip' has no attribute 'main'"和“Non-zero exit code”错误
1.Python 3.6安装yaml时一开始报AttributeError: module 'pip' has no attribute错误,根据网上提供的解决方法修改Pycharm安装目录D:\Pr ...
- union: git command
# switch one tag # warning: if do that, can't commit any change git clone $project_path git checkout ...
- CSS绝对定位的原点:是在border上、padding上还是在content上?
用了那么久的绝对定位,却一直没在意一个问题,就是绝对定位的原点,究竟是在盒模型的哪一处.今天想到这个问题,直接搜索没有找到标准文档,也没有搜索到相关的问题,于是决定自己动手实现一下看看,并把这个结果发 ...
- C语言错题集
1.输入两个int型数a.b,求a/b的商c,不必考虑b为0的情况,输出c(保留两位小数) include<stdio.h> int main() { int a,b; float c; ...
- 详细分析LoadRunner参数化
在进行网页的性能测试时,对网页的登录界面进行压力测试情况下就会使用到多用户进行登录,就需要对登录名和密码进行参数化,那么loadrunner怎么参数化设置呢?下面我们来详细分析一下. 一.我们这里通过 ...
- JS中的instanceof和typeof,以及特殊引用类型
1.instanceof是用于测试对象类型,通常格式为:a instanceof b,返回true或falise,表示为对象a是否是类型b的实例. typeof则是用于测试基本类型,包括undefin ...
- 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验二 面向对象程序设计 实验报告
20175316 盛茂淞 2018-2019-2 <Java程序设计>实验二 面向对象程序设计 实验报告 (一)单元测试 在 IDEA中我们把产品代码放在src目录中,把测试代码放在tes ...
- RAM和ROM
RAM:随机存取存储器(英语:Random Access Memory,缩写:RAM),也叫主存,是与CPU直接交换数据的内部存储器.[1]它可以随时读写(刷新时除外,见下文),而且速度很快,通常作为 ...
- MongoDB的数据备份与恢复
一:数据备份操作 步骤: 1.以管理员身份打开cmd,然后打开到mongdb的bin文件夹 2.输入命令 mongodump -h dbhost -d dbname -o dbdirectory -h ...