Python笔试现场编程:用位运算符实现加法,不允许使用 “+”

使用位运算符的现场笔试题目

我们在很多编码大赛中也能看到许多高人、大咖们利用二进制数与位运算符展示了各种让人纠结却又惊奇的代码,作为计算机基础,二进制也成为了很多企业考察招聘人员的重点之一. 今天我们就来看一道要求使用经典的位运算符进行现场编程的笔试题,话不多说,直接看题:


Calculate the sum of two integersaandb, but you are not allowed to use the operator+and-.

Example:

Givena= 1 andb= 2, return 3.

首次看到这样的题目,相信很多应聘人员都是头脑迷糊,所以我们今天就来仔细分析下这道现场编程题,到底用什么位运算符以及怎么实现加法?


位运算基本理论

一 、位运算符

用位运算实现加法也就是计算机用二进制进行运算,自然离不开位运算符:

位运算符表

二、异或运算

我们所要实现的加法,先用1位数的加法来演示且不考虑进位,如下

一位数的加法

很明显上述的表达式可以用位运算的“^”来代替,如下:

^ 运算符实现一位加法

这样我们就完成了简单的一位数加法,那么要进行二位的加法,这个方法可行不可行呢?肯定是不行的,矛盾就在于,如何去

获取进位?

三、定理

我们思考以下问题:

进位规律

从上面我们可以发现规律:

在位运算中,我们用“<<”表示向左移动一位,也就是“进位”。那么我们就可以得到如下的表达式,进位可以用如下表示:

(x&y)<<1

综上所述我们得到以下两个表达式:

x^y                    //执行加法

(x&y)<<1         //进位操作

下面我们来做个2位数的加法,不考虑进位:

11+01 = 100    // 本来的二进制算法

// 用推算的表达式计算

11 ^ 01 = 10

(11 & 01) << 1 = 10

由于题目要求我们不能使用加法符号,所以要想别的方法,我们再来看两位二进制数按上述算法计算的过程:

10 ^ 10 = 00

(10 & 10) << 1 = 100

到这里基本上就得出结论了,其实后面的那个 “00” 已经不需要再计算了,因为第一个表达式就已经算出了结果,所以我们有以下定理:

Python解题

根据上述定理,我们就能实现题目要求,话不多说,直接上代码

代码实现

持续更新python编程技巧,助你突破面笔试门槛

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 运算符是处理数据的基本方法,用来从现有的值得到新的值。JavaScript 提供了多种运算符,本章逐一介绍这些运算...
    许先生__阅读 712评论 0 3
  • 运算符是处理数据的基本方法,用来从现有的值得到新的值。JavaScript 提供了多种运算符,本章逐一介绍这些运算...
    徵羽kid阅读 782评论 0 0
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,572评论 0 13
  • 我们知道,计算机最基本的操作单元是字节(byte),一个字节由8个位(bit)组成,一个位只能存储一个0或1,其实...
    JxYoung阅读 43,004评论 22 90
  • 本章将会介绍 模块和源文件访问级别访问控制语法自定义类型子类常量、变量、属性、下标构造器协议扩展泛型类型别名位运算...
    寒桥阅读 1,006评论 0 2

友情链接更多精彩内容