位运算__

news2024/11/15 12:38:03

异或运算

相同为0,不同为1,相当于无进位相加

0 ^ N = N

N ^ N = 0

异或运算满足交换律和结合律

一、打印一个数的二进制

题目

打印一个数的二进制

代码

package bitoperation;

public class PrintBinary {
    public static void printBinary(int num) {
        for (int i = 32; i > 0; i--) {
            System.out.print((num & (1 << i)) == 0 ? '0' : '1');
        }
    }
}

二、用位运算实现+ - * /

题目

用位运算实现+ - * /

代码

package class05;

// 测试链接:https://leetcode.com/problems/divide-two-integers
public class Code03_BitAddMinusMultiDiv {

    public static int add(int a, int b) {
        int sum = a;
        while (b != 0) {
            sum = a ^ b;
            b = (a & b) << 1;
            a = sum;
        }
        return sum;
    }

    public static int negNum(int n) {
        return add(~n, 1);
    }

    public static int minus(int a, int b) {
        return add(a, negNum(b));
    }

    public static int multi(int a, int b) {
        int res = 0;
        while (b != 0) {
            if ((b & 1) != 0) {
                res = add(res, a);
            }
            a <<= 1;
            b >>>= 1;
        }
        return res;
    }

    public static boolean isNeg(int n) {
        return n < 0;
    }

    public static int div(int a, int b) {
        int x = isNeg(a) ? negNum(a) : a;
        int y = isNeg(b) ? negNum(b) : b;
        int res = 0;
        for (int i = 30; i >= 0; i = minus(i, 1)) {
            if ((x >> i) >= y) {
                res |= (1 << i);
                x = minus(x, y << i);
            }
        }
        return isNeg(a) ^ isNeg(b) ? negNum(res) : res;
    }

    public static int divide(int a, int b) {
        if (a == Integer.MIN_VALUE && b == Integer.MIN_VALUE) {
            return 1;
        } else if (b == Integer.MIN_VALUE) {
            return 0;
        } else if (a == Integer.MIN_VALUE) {
            if (b == negNum(1)) {
                return Integer.MAX_VALUE;
            } else {
                int c = div(add(a, 1), b);
                return add(c, div(minus(a, multi(c, b)), b));
            }
        } else {
            return div(a, b);
        }
    }
}

三、不用中间变量交换俩个数的值

题目

不用中间变量交换俩个数的值

代码

package bitoperation;

public class SwapTwoNum {
    public void swapTwoNum(int num1, int num2) {
        //设num1 = x,num2 = y
        //则num1 = x ^ y
        num1 = num1 ^ num2;
        //则num2 = x ^ y ^ y = x
        num2 = num1 ^ num2;
        //则num1 = x ^ y ^ x = y
        num1 = num1 ^ num2;
    }
}

四、找到出现奇数次的数

题目

在一个数组中,有一个数出现了奇数次,其他数都出现了偶数次,找出这个数

代码

package bitoperation;

public class EvenTimesOddTimes {
    public int evenTimesOddTimes(int[] arr) {
        int num = 0;
        for (int i = 0; i < arr.length; i++) {
            num ^= arr[i];
        }
        return num;
    }
}

原理

0 ^ N = N

N ^ N = 0

异或运算满足交换律和结合律

五、找到一个数二进制形式的最右边的1

题目

给定一个int类型的数,找到这个数二进制形式的最右边的1,并返回只有这位上有1其他位上为0的二进制对应的十进制数

代码

package bitoperation;

public class FindRightOne {
    public int findRightOne(int num) {
        return num & (-num);
    }
}

六、找到数组中出现过奇数次的两个数

题目

一个数组中有两种数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这两种数

代码

package bitoperation;

public class _6FindTwoNum {
    public void findTwoNum(int[] arr) {
        int num = 0;
        for (int i = 0; i < arr.length; i++) {
            num ^= arr[i];
        }
        //假设求得两个数为a和b
        //num现在等于 a ^ b
        //找到num最右边的1
        //此位上a和b必定有一个为1,一个不为1,a和b等价,假设a为1
        int one = num & (-num);
        int num2 = 0;
        for (int i = 0; i < arr.length; i++) {
            if ((arr[i] & one) != 0) {
                num2 ^= arr[i];
            }
            //得到的是a最右边的1的位数相等的所有数异或操作
            //右因为其它数都是出现过偶数次
            //所以num2 = a
            int b = num ^ num2;
            System.out.println(num2 + " " + b);
        }
    }
}

七、找到出现了K次的数

题目

在一个数组中,一个数出现了K次,其它数都是出现了M次,0<K<M,现给出数组和M,请返回出现了K次的数的值

代码

package bitoperation;

public class _7KM {
    public int km(int[] arr, int K, int M) {
        int[] myarr = new int[32];
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < 32; j++) {
                //如果arr的第0位的数的二进制的第j位为1,则记录在myarr[j]中
                myarr[j] += (arr[i] >> j) & 1;
                //相当于
                //if ((myarr[i] & (1 << j)) != 0) {
                //    myarr[i]++;
                //}
            }
        }
        int num = 0;
        for (int i = 0; i < 32; i++) {
            if (myarr[i] % M != 0) {
                num |= (1 << i);
            }
        }
        return num;
    }
}

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

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

相关文章

代码重构之路 --我的2022年总结

2022年是我正式参加工作的第10个年头&#xff0c;也是我在CSDN上写博客的第11个年头。在这10余年的时间里&#xff0c;虽然在工作上遇到了各种情况&#xff0c;但我一直坚持输出、坚持分享&#xff0c;一共在CSDN上发表了530多篇原创博文。在这些文章中&#xff0c;大部分都是与…

论文投稿指南——中文核心期刊推荐(能源与动力工程)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

一篇五分生信临床模型预测文章代码复现——Figure 4-6 临床模型构建(八)

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

gateway整合sentinel限流不生效排查

问题 线上的sentinel 在测试压测时候可以正常被限流 但是在正常的流量中 发现被限流的接口很少 &#xff08;我发誓肯定都配置了限流规则&#xff09; 约定 文中的 服务名称以及地址 都被改写了 排查步骤 1.检查相关配置 以及 pom依赖配置 发现SentinelGatewayFilter 重复…

[论文阅读] (26) 基于Excel可视化分析的论文实验图表绘制总结——以电影市场为例

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座&#xff0c;并分享给大家&#xff0c;希望您喜欢。由于作者的英文水平和学术能力不高&#xff0c;需要不断提升&#xff0c;所以还请大家批评指正&#xff0c;非常欢迎大家给我留言评论&#xff0c;学术路上期…

【iOS】—— 内存的五大分区

内存的五大分区 文章目录内存的五大分区五大分区分别是1.栈区优点&#xff1a;2.堆区优点&#xff1a;3.常量区4.静态区5.代码区static、extern、const关键字比较1.static关键字static关键字作用&#xff1a;全局静态变量局部静态变量2.extern全局变量对内的全局变量外部全局变…

25.Isaac教程--Carter机器人

Carter机器人 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html Carter 是一个机器人平台&#xff0c;使用 Segway 的差分底座、用于 3D 范围扫描的 Velodyne P16、ZED 相机、IMU 和 Jetson TX2 作为系统的核心。 与定制安装支架一起&#xff0c;它…

WSL2 Ubuntu+gnome图形界面的安装血泪史(亲测有效)

WSL2 Ubuntugnome图形界面写在最前面&#xff08;血泪史&#xff09;1.wsl2 安装2.Ubuntu安装3.VcXsrv安装与启动4. gnome图形界面的配置5.显卡驱动的升级写在最前面&#xff08;血泪史&#xff09; 前因 近期遇到一个问题&#xff0c;需要在ubuntu虚拟机上用opengl3.3以上的版…

导航相关产品调研

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言1、现有的业务产品2、常做的导航规控业务前言 认知有限&#xff0c;望大家多多包涵&#xff0c;有什么问题也希望能够与大家多…

“水果零售第二股”百果园上市首日市值近百亿

“水果零售第二股”来了&#xff01;今日&#xff08;1月16日&#xff09;&#xff0c;国内最大水果零售商深圳百果园实业&#xff08;集团&#xff09;股份有限公司&#xff08;下称“百果园”&#xff0c;02411.HK&#xff09;正式挂牌港交所。▲图源:百果园官网百果园此次IP…

8.框架Spring

一、基本概念 Spring 是 Java EE 编程领域的一款轻量级的开源框架&#xff0c;由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立&#xff0c;它的目标就是要简化 Java 企业级应用程序的开发难度和周期。 导入依赖&#xff1a; <dependency><groupId>o…

操作系统(一)

操作系统&#xff08;一&#xff09; 1、什么是操作系统 操作系统是指控制和管理整个计算机系统的硬件与软件资源&#xff0c;合理的组织、调度计算机的工作与资源分配&#xff0c;进而为用户和其他软件提供方便接口与环境的程序集合。操作系统是计算机系统中最基本的系统软件…

Android 深入系统完全讲解(24)

https://blog.csdn.net/weixin_41101173/article/details/80374455 理解了绘制内容&#xff0c;解决了这部分&#xff0c;下来我们来说说关于音视频的其他部分。 所有的文件&#xff0c;都有一个叫做格式的东西存在&#xff0c;MP3&#xff0c;WAV&#xff0c;而处理这个格式的…

zookeeper集群安装

zookeeper集群安装 1. 安装环境介绍 下载地址&#xff1a; http://archive.apache.org/dist/zookeeper/ 安装版本&#xff1a; 3.7.0 安装包&#xff1a; apache-zookeeper-3.7.0-bin.tar.gz 安装目录&#xff1a; /opt 机器IP&#xff1a; 10.28.19.107 10.28.19.108 10…

字符矩阵内单词搜索

单词搜索 问题链接&#xff1a;word search&#xff01;&#xff01;&#xff01; 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通…

【阅读笔记】c++ Primer Plus——第九章

内存模型和命名空间 单独编译 c程序分成三部分 第一部分&#xff1a;包含结构声明和使用这些结构的函数原型(头文件)第二部分&#xff1a;包含与结构有关的函数代码(源代码文件)第三部分&#xff1a;包含调用与结构相关的函数代码(源代码文件)头文件包含了用户定义类型的定义…

FPGA 20个例程篇:19.OV7725摄像头实时采集送HDMI显示(二)

第七章 实战项目提升&#xff0c;完善简历 19.OV7725摄像头实时采集送HDMI显示&#xff08;二&#xff09; 在正式介绍OV7725 CMOS Sensor视频采集前&#xff0c;首先需要去详细说明OV7725的寄存器配置接口&#xff0c;这里有OmniVision公司推出的官方手册 “OV7725_software_…

8个必须掌握的Blender拓扑技巧

组合 3D 模型的过程对后续过程影响很大 - 稍后编辑的难易程度、应用光照和着色器时的外观效果如何、动画时变形的难易程度等等。 一个好的模型对于 CG 管道的所有其他部分的良好运行至关重要。 另一方面&#xff0c;凌乱的拓扑结构会使流程的其余部分成为一场灾难。 你能做些…

IB地理科补习有用吗?

IB地理科的补习如何帮助学生改变学科的表现&#xff1f;这可以从几方面来做分析。 1. 训练 第一是训练。我们老师会按来补习的同学的个人需求、时间和个性&#xff0c;提供很多不同程度的训练&#xff0c;帮助他们建立一个正确的能力系统&#xff08;skill set&#xff09;去应…

二、预训练模型预测(Datawhale组队学习)

文章目录安装配置环境ImageNet预训练图像分类模型预测单张图像-英文载入预训练图像分类模型图像预处理执行图像分类预测预测结果分析ImageNet预训练图像分类模型预测单张图像-中文预训练图像分类模型图像预处理执行图像分类预测预测结果分析ImageNet预训练图像分类模型预测视频…