首页 > 其他分享 >使用位运算进行加法运算

使用位运算进行加法运算

时间:2024-04-07 15:22:25浏览次数:22  
标签:运算 int 32 加法 dataA dataB 使用 进位

题目大意

给你两个整数,求a + b,结果不会超过32位整数,但不能用 +、-、*、/等运算符!

思路

①异或运算 = 无进位和 (a ^ b)
②单独提取进位:(a & b) << 1
③无进位和 + 进位 = 答案


Python,Java, C++ 等语言中的数字都是以补码形式存储的。
但Python没有int,long等不同长度变量,即在编程时无变量位数的概念。

python获取负数的补码: 需要将数字与十六进制数 0xffffffff 相与。
可理解为舍去此数字 32 位以上的数字(将 32 位以上都变为 000 ),从无限长度变为一个 32 位整数。


c++版本

class Solution {
public:
    int encryptionCalculate(int dataA, int dataB) {
        while(dataB != 0)
        {
            int c = (unsigned int)(dataA & dataB) << 1;
            dataA ^= dataB;
            dataB = c;
        }
        return dataA;
    }
};

python版本

class Solution:
    def encryptionCalculate(self, dataA: int, dataB: int) -> int:
        x = 0xffffffff
        # 取 补 码
        a,c = dataA & x,dataB & x
        # 直 至 进 位 为 0
        while c != 0:
            a,c = a ^ c,(a & c) << 1 & x
        # 超 过 0x7fffffff【最大正数的补码】,就是负数了,转换【将32位以上的位取反】
        return a if a <= 0x7fffffff else ~(a ^ x)

标签:运算,int,32,加法,dataA,dataB,使用,进位
From: https://www.cnblogs.com/gebeng/p/18119127

相关文章

  • 使用miniforge平替anaconda,重建airflow服务
    背景因公司通知不能使用anaconda,可以采用miniforge作为开源平替,因之前环境搭建使用的就是anaconda,当前需要卸载并替换成miniforge。那为什么一定要用这个呢,其实也不是一定,而是用这个搭建环境比较省事,如果没用这个,我当前环境的python版本过低,解决这个问题耗费的时间会更久,所以最......
  • 如何在表单中使用正则表达式校验中文姓名
    在表单中,经常需要对用户输入进行校验以确保数据的准确性和完整性。在某些情况下,我们可能需要使用正则表达式来实现特定的验证规则。本文将介绍如何在表单中使用正则表达式校验中文姓名。正则表达式简介正则表达式是一种强大的模式匹配工具,它可以用来检查一个字符串是否与某种......
  • qt Qml qml Property的使用方法
    9.property简介:自己声明一个变量名,自己赋值,外部可以对其赋值可以声明一个属性变量intstringvardouble等等也可以声明一个控件用于外部写入到本qmlrectanglecomponent等等其他:在property前面可以加readonly就可以只能外部访问,不能修改在property前面可以加req......
  • 教你如何使用Zig实现Cmpp协议
    本文分享自华为云社区《华为云短信服务教你用Zig实现Cmpp协议》,作者:张俭。引言&协议概述中国网络通信集团短信网关协议(CNGP)是中国网通为实现短信业务而制定的一种通信协议,全称叫做ChinaNetcomShortMessageGatewayProtocol,用于在PHS短消息网关(SMGW)和服务提供商(SP)之间、短消......
  • 如何在 Node.js 中使用 bcrypt 对密码进行哈希处理
    在网页开发领域中,安全性至关重要,特别是涉及到用户凭据如密码时。在网页开发中至关重要的一个安全程序是密码哈希处理。密码哈希处理确保明文密码在数据库受到攻击时也难以被攻击者找到。但并非所有的哈希方法都是一样的,这就是bcrypt突出之处所在。Node.js是一个流行的用于开......
  • CE规则文件和注释的使用
    1.CGA规则文件的使用  本次实验将创建一个简单的规则文件,以熟悉CGA规则文件的使用方法,包括起始规则的声明等,将其应用于初始形状并生成模型。创建规则文件  在导航器窗口中选择工程的rules文件夹。单击新建→CityEngine→CGA规则文件。或者,在导航器窗口中右键单击规则文件夹......
  • JavaScript中,...(三个点)是扩展运算符
    在JavaScript中,...(三个点)是扩展运算符(SpreadOperator)和剩余参数(RestParameters)的语法。它确实可以用来“展开”对象的属性或数组的元素。展开对象的属性对于对象,扩展运算符可以用来将一个对象的所有可枚举属性复制到新对象中,或者与现有的对象属性合并。javascript复制代码......
  • 在使用set添加对象的时候,重写了hashcode方法后,为什么equals返回的仍是false,如何理解ha
    /**1.对象的哈希码值和内存地址值不是一回事;*2.如果自定义类不复写Object类中的equals方法,那么equals比较的就是两个对象的内存地址值。*//***下面证明了hash值和内存地址的关系*一、当没有重写hashCode()方法的时候,*S......
  • go | 上传文件分析 | http协议分析 | 使用openssl 实现 https 协议 server.key、serve
    是这样的,现在分析抓包数据test.gopackagemainimport( "fmt" "log" "github.com/gin-gonic/gin")funcmain(){ r:=gin.Default() //Uploadsinglefile r.MaxMultipartMemory=8<<20 r.POST("/upload",func(......
  • Python学习(七):基础运算符与表达式【详解】
    文章目录python基础运算符与表达式运算符与表达式的优先级算术运算符(四则运算)算术运算符(取余/模、乘方)关系比较运算符位运算符逻辑运算符赋值运算符、复合赋值运算符条件表达式await序列切片表达式星号表达式yield表达式lambda表达式python基础运算符与表达式运算符......