利用位运算进行a+b的计算(Java&&Python)
题目链接
需要用到的位运算操作:异或(^)、与(&)、右移(<<)
- 异或运算:又称不进位加法,a^b得到的结果为a与b相加,但是需要进位的地方不进位得到的结果
- 与运算:找出来a和b中均为1的位置,利用右移操作来实现进位
- a+ba+ba+b可以转换成位运算:a+b=(a^b)+(a&b<<1),持续进行到a&b=0结束即可
Java代码:
public class Solution {
/**
* @param a: An integer
* @param b: An integer
* @return: The sum of a and b
*/
public int aplusb(int a, int b) {
while(b!=0){
int _a=a^b;
int _b=(a&b)<<1;
a=_a;
b=_b;
}
return a;
// write your code here
}
}
Python代码:
对于Python来说,因为Python没有符号位右移操作,所以需要检查当前数字是否超过了int范围,0xffffffff保证了在位运算的过程中,数字范围均不超过int
while循环结束后,将结果与0x7fffffff比较
如果小于等于0x7fffffff,说明当前结果没有超过int范围,直接输出
如果大于0x7fffffff,说明当前结果超出了int范围,需要转换到int范围内
class Solution:
"""
@param a: An integer
@param b: An integer
@return: The sum of a and b
"""
def aplusb(self, a, b):
while(b!=0):
# &0xffffffff的目的是将a,b的范围限制在int内
a,b=(a^b)&0xffffffff,((a&b)<<1)&0xffffffff
# 和int范围的最大值进行比较
if a<=0x7fffffff:
return a
# 将无符号位的数转换成有符号位的数
else:
return ~(a^0xffffffff)
# write your code here
利用位运算进行a+b的计算(Java&&Python)的更多相关文章
- C# 利用位运算传递多个参数方法
前言 在工作中用sendMessage的方法向另外一个进程中传递窗体的位置,长度,宽度四个值,但是sendMessage的方法签名中只有两个参数.于是在网上找到了一些代码,找到了这个利用位运算来合并参 ...
- 剑指offer用位运算实现两个数相加,及python相关的位操作
题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 代码: # -*- coding:utf-8 -*-class Solution: def Add(self ...
- 使用位运算、值交换等方式反转java字符串-共四种方法
在本文中,我们将向您展示几种在Java中将String类型的字符串字母倒序的几种方法. StringBuilder(str).reverse() char[]循环与值交换 byte循环与值交换 apa ...
- C语言位运算
C语言位运算详解 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,shor ...
- POJ 1753 位运算+枚举
题意: 给出4*4的棋盘,只有黑棋和白棋,问你最少几步可以使棋子的颜色一样. 游戏规则是:如果翻动一个棋子,则该棋子上下左右的棋子也会翻一面,棋子正反面颜色相反. 思路: 都是暴搜枚举. 第一种方法: ...
- Java I/O : Bit Operation 位运算
Writer :BYSocket(泥沙砖瓦浆木匠) 微 博:BYSocket 豆 瓣:BYSocket FaceBook:BYSocket Twitter ...
- 【php】php位运算及其高级应用
我们之前学过逻辑与(&&) 条件1 && 条件2 当两边条件同时成立时候返回1 逻辑或(||) 条件1 || 条件2 当两边条件只要有一 ...
- php位运算及其高级应用
我们之前学过逻辑与(&&) 条件1 && 条件2 当两边条件同时成立时候返回1 逻辑或(||) 条件1 || 条件2 当两边条件只要有一 ...
- Acwing-164-可达性统计(拓扑排序, 位运算统计)
链接: https://www.acwing.com/problem/content/166/ 题意: 给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量. 思路: 先拓扑排序求 ...
随机推荐
- Python中类的__init__继承
Python中类的__init__继承 概念: 定义父类 In [10]: class Person: ....: def __init__(self,name,age,sex): ....: sel ...
- 关于visual studio的一些日常总结
一.常用的VS快捷键 批量注释:ctrl + k ctrl + c 批量解除注释:ctrl + k ctrl + u 转到声明:ctrl + F12 查找:ctrl + F 添加断点:F9 逐过程调试 ...
- Django基础-02
django的介绍: Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,通过减少重复的代码,Django 使你能够专注于 web 应用上有 趣的关键性的东西.为了达到这个目标,Dj ...
- leetcode python 033 旋转数组查找
## 假设升序,import random def find(y): l,m=len(y),0 while l>1: n=int(l/2) if y[0] ...
- CXF 简单创建Webserver 例子
最近在弄webserver,因为公司需要用到,来说说,webserver的常用方式吧 1.什么是webservice 1.1 什么是远程调用技术 远程调用数据定义:是系统和系统之间的调用 先说一说 ...
- 介绍一下Spring Cloud简介
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线).分布式系统的协调导致了样板模式, 使用Spring Clo ...
- 简单的bootstarp项目实例
===========index.html==============<!DOCTYPE html> <html> <head> <meta charset= ...
- hadoop管理命令
-help 功能:输出这个命令参数手册 -ls 功能:显示目录信息 示例: hadoop fs -ls hdfs://hadoop-server01:9000/ 备注:这些参数中,所有的hdfs ...
- python logging模块使用流程
#!/usr/local/bin/python # -*- coding:utf-8 -*- import logging logging.debug('debug message') logging ...
- JAVA接口里面的变量
在interface里面的变量都是public static final 的.所以你可以这样写:public static final int i=10;或则int i=10:(可以省略掉一部分) 注 ...