位运算实现加减乘除(自用水文)

news2024/11/18 17:42:36

目录

位运算实现加法

位运算实现减法

位运算实现乘法

位运算实现除法

代码示例


PS:用位运算实现的加减乘除,其数据都是整型的(int、char、size_t等)

位运算实现加法

LeetCode_2.两数相加_小白麋鹿的博客-CSDN博客icon-default.png?t=N4HBhttps://yt030917.blog.csdn.net/article/details/129628846

位运算实现减法

减法用加上一个数的相反数来实现

位运算实现乘法

LeetCode_面试题 08.05. 递归乘法_小白麋鹿的博客-CSDN博客icon-default.png?t=N4HBhttps://yt030917.blog.csdn.net/article/details/129918992

位运算实现除法

LeetCode_29. 两数相除_小白麋鹿的博客-CSDN博客icon-default.png?t=N4HBhttps://yt030917.blog.csdn.net/article/details/130753574

代码示例

class Calculate 
{
public:
    //加法
    int add(int num1, int num2) 
    {
        while (num2 != 0)
        {
            //注意这里强转是为了防止越界
            unsigned int tmp = static_cast<unsigned int>(num1 & num2) << 1;
            num1 = num1 ^ num2;
            num2 = tmp;
        }
        return num1;
    }
    //减法
    int sub(int num1, int num2) 
    {
        return add(num1, -num2);
    }
    //乘法
    int multiply(int A, int B)
    {
        int tag = A ^ B;
        int product = 0;
        A = abs(A);
        B = abs(B);
        for (int i = 0; A >> i; i++)
        {
            if ((A >> i & 1) == 1)       
                product += (long long)B << i;           
        }
        if (tag < 0)
            product = -product;
        return product;
    }
    //除法
    int divide(int dividend, int divisor)
    {
        if (dividend == INT_MIN && divisor == INT_MIN)    
            return 1;        
        else if (divisor == INT_MIN)
            return 0;

        if (dividend == INT_MIN)
        {
            if (divisor == -1)
                return INT_MAX;
            else if (divisor == 1)
                return INT_MIN;

            int tmp = div(dividend + 1, divisor);
            return tmp + div(dividend - multiply(tmp, divisor), divisor);
        }
        //以上部分均为处理INT_MIN的特殊情况
        return div(dividend, divisor);
    }
private:
    int div(int dividend, int divisor)
    {
        int tag = dividend ^ divisor;
        dividend = dividend > 0 ? dividend : ~dividend + 1;
        divisor = divisor > 0 ? divisor : ~divisor + 1;
        int ans = 0;
        while (dividend >= divisor)
        {
            int index = -1;
            while (dividend >> ++index >= divisor);
            index--;
            dividend -= divisor << index;
            ans |= 1 << index;
        }
        if (tag < 0)
            ans = -ans;
        return ans;
    }

};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/541791.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Jmeter第一章】Jmeter实操详细教程(快速入门)

文章目录 1、前言2、Jmeter介绍3、Jmeter下载安装4、Jmeter快速入门4.1、切换为中文显示4.2、基本使用 总结 1、前言 本篇内容为Jmeter的简单使用介绍&#xff0c;是基础的使用技巧&#xff0c;希望能帮到各位&#xff0c;不足之处还望多多包涵&#xff0c;最后感谢您的阅览。…

ChatGPT工作提效之初探路径独孤九剑遇强则强

ChatGPT工作提效之遇强则强 前言一、如何使用ChatGPT二、ChatGPT实战应用三、ChatGPT会叫的小孩有奶吃工具类的交互问答类的交互开发类的交互 前言 读《笑傲江湖》西湖比剑时&#xff0c;对于独孤九剑1的解读印象颇为深刻。令狐冲被任我行这个高手激发出许多精妙的剑招。这独孤…

【原创】企业级别的Kafka配置--按照市场分区

企业级别的Kafka配置--按照市场分区 背景--Kafka广播按照市场分区生产者和消费者设计方案Kafka Broker设计消费消息时增加过滤条件消费者端利用多线程/多协程机制提高吞吐量 背景–Kafka广播 对于同一个Topic来说&#xff0c;每个消费者组都可以拿到这个Topic中的全部数据。消…

论文阅读《Gradient-based Camera Exposure Control for Outdoor Mobile Platforms》

摘要 本文介绍了一种用于移动机器人平台上图像处理和计算机视觉应用的自动调节相机曝光的新方法。由于大多数图像处理算法严重依赖于主要基于局部梯度信息的低级图像特征&#xff0c;因此我们认为梯度量可以确定适当的曝光水平&#xff0c;从而使相机能够以对照明条件具有鲁棒…

LaTeX详细安装教程|LaTeX 基础知识|LaTeX 常用语法|LaTeX 快速入门

latex安装教程 一、LaTeX 基础知识1.1 LaTeX 的特点1.2 LaTeX 的基本组成部分 二、TeXLive安装包下载三、安装步骤四、TeXstudio安装及简单使用五、快速入门&#xff08;LaTeX 常用语法&#xff09;5.1 文本格式5.2 数学公式5.3 LaTeX 支持有序列表和无序列表5.4 图片和表格 La…

vim自动文件头

注意&#xff1a;以下方法是安装了ycm后的方法&#xff0c;没安装是否好使不知道&#xff0c;建议还是安装ycm&#xff0c;原版的vim真不好用。 在用vim编辑代码的时候自动添加文件头还是比较有用的。 比如像下面这样&#xff0c;只要输入vim test.py文件头就自动添加上了。 …

【Spring框架】--03.AOP

文章目录 5.面向切面&#xff1a;AOP5.1场景模拟5.1.1声明接口5.1.2创建实现类5.1.3创建带日志功能的实现类5.1.4提出问题 5.2代理模式5.2.1概念5.2.2静态代理5.2.3动态代理5.2.4测试 5.3AOP概念及相关术语5.3.1概述5.3.2相关术语①横切关注点②通知&#xff08;增强&#xff0…

微服务架构 云原生应用从这一步开始

什么是云原生应用和微服务架构 云原生应用是一种设计和构建方式&#xff0c;旨在充分利用云计算的弹性、可扩展性和高可用性特性。云原生应用将应用程序的开发、交付和运行环境与云平台密切结合&#xff0c;以实现高度灵活、可靠和可扩展的部署。 云原生应用的核心原则包括以…

Java | 一分钟掌握定时任务 | 6 - Quartz定时任务

作者&#xff1a;Mars酱 声明&#xff1a;本文章由Mars酱原创&#xff0c;部分内容来源于网络&#xff0c;如有疑问请联系本人。 转载&#xff1a;欢迎转载&#xff0c;转载前先请联系我&#xff01; 前言 前几篇介绍了单体架构的定时任务解决方式&#xff0c;但是现代软件架构…

Mysql【基础篇】—— mysql安装和环境配置

Mysql【基础篇】—— mysql安装和环境配置&#x1f60e; Mysql 的概述Mysql下载安装和环境配置下载流程&#xff1a;Mysql启动&#xff1a;客户端连接方式一&#xff1a;使用MySQL提供的客户端命令行工具方式二&#xff1a;使用系统自带的命令行工具执行指令 总结撒花&#x1f…

tb-gateway配置OPC UA

1、安装模拟软件KEPServerEX 6 省略 2、配置OPC UA 安装好KEPServerEX 6之后,默认再电脑的最小化窗口会显示一个图标 右键点击图标,会显示一个OPC UA配置,然后点击配置,进入下面页面 点击添加按钮,弹出下面的弹窗 然后进行选择和配置,见下图,然后保存即可。 3、启动K…

【Linux】Linux编译器--vim的使用

&#x1f601;作者&#xff1a;日出等日落 &#x1f514;专栏&#xff1a;Linux 当你还不能对自己说今天学到了什么东西时&#xff0c;你就不要去睡觉。 ——利希顿堡 目录 vim是什么 vim安装 vim的基本概念 vim的基本操作 vim正常模式命令集 vim末行模…

R.I.P

0x01 这几天&#xff0c;陈皓老师&#xff08;网名&#xff1a;左耳朵耗子&#xff09;因心梗离世的消息相信大家也都看到了。 于我而言&#xff0c;震惊、难过之余&#xff0c;心里也是阵阵惋惜。 相信不少同学了解陈皓老师都是从他的个人博客酷壳CoolShell开始的。 同样&…

JavaWeb13-JavaScript 开发利器之 jQuery-02

1. jQuery 的 DOM 操作 1.1 查找节点, 修改属性 查找属性节点: 查找到所需要的元素之后, 可以调用 jQuery 对象的 attr() 方法来获取它的各种属性值 查找节点-应用实例 element-attribute.html <!DOCTYPE html> <html lang"en"> <head><met…

全网详细Django框架快速体验

一、安装Django (1)安装django命令 pip install django 二、命令行创建项目 执行命令创建项目 django-admin startproject 项目名称 如&#xff1a; django-admin startproject mysite 三、项目目录结构 mysite|----manage.py # 项目的管…

Nat. Mach. Intell 2023 | RT:首个统一分子性质预测(回归) 与条件生成的模型

原文标题&#xff1a;Regression Transformer enables concurrent sequence regression and generation for molecular language modelling 论文地址&#xff1a;Regression Transformer enables concurrent sequence regression and generation for molecular language model…

Servlet编程---Day 07

目录 一、过滤器概述 二、过滤器使用 &#xff08;一&#xff09;开发第一个过滤器 &#xff08;二&#xff09;过滤器的生命周期 &#xff08;三&#xff09;FilterChain(过滤器链) 1.过滤器链认识 2.过滤器链代码实现 3.过滤器链顺序 &#xff08;四&#xff09;请求…

【C++进阶】多态详解(上)

文章目录 一、多态的概念二、多态的定义及实现1.多态的构成条件2.虚函数3.虚函数的重写(1)虚函数重写概念(2)虚函数重写的两个例外&#xff1a;(3)析构函数是否要定义为虚函数(4)C11 override 和 final 三、抽象类1.概念2.接口继承和实现继承 四、多态的原理1.虚函数表2.多态的…

各种常见的word格式符号(回车字符、软回车、分页符等)

一、如何显示编辑符号 1、打开WORD-选项-显示&#xff0c;勾选格式标记 2、如下图所示。在【开始】一【段落】选项卡中&#xff0c;它可以帮助我们识别编辑过程中的格式符号。 二、各种常见的word格式符号 第一种 描述&#xff1a;向下的箭头 样式&#xff1a;↓ 名字&#xff…

Esbuild基本使用与插件开发

作为Vite的双引擎之一&#xff0c;Esbuild在很多关键的构建阶段(如依赖预编译、TS语法转译、代码压缩)让Vite获得了相当优异的性能&#xff0c;是Vite高性能的得力助手。无论是在Vite的配置项还是源码实现&#xff0c;都包含了不少Esbuild的基本概念和高阶用法。因此&#xff0…