java的异或运算

article/2025/10/6 8:40:50

一、题目

输入两个数,交换后输出

二、解题思路

        一开始学习的语言是c语言,里面非常有特色的是指针,通过传引用可以直接交换两个数。但java无法达成这种操作,翻阅资料找到了一种有趣的解法:异或!

异或原理:

a ^ a = 0 ; a ^ 0 = a ; a ^ ( b ^ c ) = ( a ^ b ) ^ c

假设输入两个数a,b,那么:

a = a ^ b

b = a ^ b = ( a ^ b ) ^ b = a ^ ( b ^ b) = a

a = b ^ a = a ^ ( a ^ b ) = ( a ^ a ) ^ b = b

交换成功(*^▽^*)

三、代码

@Testpublic void test2() {Scanner scan = new Scanner(System.in);int num1 = scan.nextInt();int num2 = scan.nextInt();num1 = num1 ^ num2;num2 = num1 ^ num2;num1 = num2 ^ num1;System.out.println(num1 + " " + num2);}

四、拓展

        学会了上面的简单操作,有两个扩展题大家可以研究一下:

        题目1:一个数组,只有一类数的次数是奇数,其他都是偶数,请找出那个奇数次的数。

        题目2:一个数组,只有两类数的次数是奇数,其他都是偶数,请找出那两个奇数次的数。

        大家可以先自己思考个五分钟,再看怎么解。

4.1 解题思路

        对于题目1大家应该很好理解,因为a ^ a = 0,所以我们只需用0去依次异或,最后那个数就是奇数次的偶数,因为偶数次的都相互抵消了。

        但题目2就有点难度了,假设两个奇数次的数分别是a、b,此时用题目1的解法去解的话,最后的答案是a ^ b。我们要怎么提取那两个数呢?

        里面用到的这个公式就是一个位运算提取的公式,如果大家不理解的话我给你们举个例子:

        100010100 取反得 011101011 

                              +1得 011101100

          和100010100&得 000000100

        仔细观察,此时得到的数是不是原本的数只取最右1。好了,现在我们就可以拿着这个数去依次&,得到a或b中的一个数,那只要再与 a ^ b 异或一次,就可以得到另一个数了。

        这个地方有点难以理解,总体思路就是找到a与b不同的那一位,再去&排除其中一个数,最后再异或即可得到另一个数。

4.2 代码

/*** @author wai-en* @create 2022-07-12-21:07*/
public class Eor {public static void main(String[] args) {eor1();eor2();}public static void eor1() {int[] arr = new int[]{1,2,2,3,3,3,3};//1是奇数次int eor = 0;for(int x : arr) {eor ^= x;}System.out.println(eor);}public static void eor2() {int[] arr = new int[]{1,2,2,3,3,3,3,4,4,4};//1和4是奇数次int eor = 0;for(int x : arr) {eor ^= x;}int right = eor & (~eor + 1);int theOne = 0;for(int x : arr) {//等于1等于0都无所谓,只要提取出其中一个就好if((right & x) == 1) {theOne ^= x;}}int other = eor ^ theOne;System.out.println(theOne + " " + other);}
}


http://chatgpt.dhexx.cn/article/lb29nhe4.shtml

相关文章

java基础-异或运算

小伙伴们,你们好呀!我是老寇! 异或运算主要用于判断两个值是否一样 异或运算的3个性质: 1.任何数和0进行异或运算,结果是原来的数,即b⊕0b 2.任何数和其自身进行异或运算,结果为0,即…

Java中的异或运算符^

Testpublic void test2() {int a2;int b3;aa^b;ba^b;aa^b;System.out.println("a"a",b"b);}第一种:用真实值计算 ^是异或运算符,异或的规则是转换成二进制比较,相同为0,不同为1. 一个数a与另一个数b异或的结果…

java中的异或运算

👏作者简介:大家好,我是Rockey,不知名企业的不知名Java开发工程师 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦 📝联系方式:he18339193956&…

HTTP Status 505 – HTTP Version Not Supported

这个大部分的原因不是httpserver不支持,而是请求url里有空格,检查有空格UTF-8编码再传 比如:远程调用服务端地址有空格 去除空格

HTTP Status 500 解决办法

HTTP Status 500 解决办法 在Java web 论坛系统中也遇见了这个问题,在这里就提供一个解决的办法。 图中显示 int idInteger.parseInt(request.getParameter("id")); 这一段有错误。这里是因为id的值不能为null,不然就会出现这个错误 修改如…

Tomcat HTTP Status 404 tomcat 404问题解决

今天初次使用tomcat的时候,用浏览器访问总是不成功。经过一番周折总算成功了,虽然这个知识点不是很难,但还是写篇博客,希望能帮助那些初学者。(注:笔者用的是:tomcat 7) 前提:你的tomcat可以访…

svn提交报错Unexpected HTTP status 413 'Request Entity Too Large' on

问题原因:nginx的client_max_body_size设置过小,默认 1M,如果请求的正文数据大于client_max_body_size,HTTP协议会报错 413 Request Entity Too Large。 解决方案:把这个值调大就可以了。

HTTP Status 404 - 解决办法

HTTP Status 404 - 解决办法 今天,我在从仓库导入web项目的时候出现了一个问题: 首先,我想的是为什么会出现,这样的问题,然后我对这个问题进行了描述,准备在网上找找解决方法,大多数给出的答案…

HTTP Status 500 – Internal Server Error

第一次碰到500错误,标题很明显,内部服务器错误,解决此类问题重点在于会看错误提示信息,之前一直没有这个意识,看到报错直接百度,其实我们稍微注意一下信息提示就能解决大部分问题,上图: 看下第二条Message,标注了/iframe/head.jsp页面,后边括号表明为第一行第二列(个…

HTTP Status 400的排错步骤 与HTTP Status 404的排错步骤

一、前言:一个问题有暗含两个错误:400和404 二、HTTP Status 400 这是在跳转修改的界面出现,跳不过去说明路径相关有问题 上面 400的解决了,然后运行404又出来了 三、HTTP Status 404 看到资源问题,就去看下导包没有&a…

SpringBoot 设置HTTP 响应状态码 (HTTP Status Code)

SpringBoot 设置HTTP 响应状态码 (HTTP Status Code) HTTP请求响应的内容有很多,包括Body、Cookies、Headers和Status。 我们最常用的是Body、其次Headers、Cookies。而HTTP Status Code关注得最少。 HTTP Status Code 分类分类描述1**信息,服务器收…

HTTP Status 500 - null

出现这类问题:The server encountered an internal error that prevented it from fulfilling this request. java.lang.Integer.parseInt(Integer.java:542) HTTP Status 500 - null 500错误是首先考虑java代码的问题,如果不是java代码的问题的话&#…

Http Status 500

这个错误一般都是空指针异常 错误信息页面一般都提示了错误的页面和行数 我的SearchCondition java:25是这样的 我的name值是空的,然后后面用到了name,所以报了空指针异常; 像大型的项目,可以采取以下的措施: 一、通过System.…

HTTP Status 500 - Internal Server Error

Http请求状态码 200:正常404:资源找不到400:请求类型不匹配500:后台程序抛出异常游览器抛出的异常其实跟最基础的JAVA程序抛出异常是相似的只是异常提醒出现的位置不同,外加给了异常类型的数字(200&#xf…

HTTP Status Codes/HTTP状态码

1.应用场景 帮助快速查询http code, 以及对应的含义,帮助定位问题。 2.学习/操作 推荐查阅 HTTP Status Codes Glossary - WebFX STATUS_CODES { 100: Continue, // 持续中 101: Switching Protocols, // 转换协议 102: Processing, // 进行中 200: OK, …

华为eNSP下的ssh配置实验

配置两台路由器(AR4为服务器,AR3为SSH客户端) 修改R3为AR3,修改R4为AR4,AR3地址192.168.1.1,AR4地址为192.168.1.2 发现能互通 配置aaa模式用户名加密码 设置权限等级 创立RSA的ssh秘钥 只允许ssh进…

WSL中的SSH配置方法

本地主机win11系统,wsl2:Ubuntu 20.04.4 LTS 1,更新linux $ sudo apt-get update lili:~$ sudo apt-get update [sudo] password for li: Ign:1 http://mirrors.ustc.edu.cn/ubuntu precise-updates InRelease Ign:2 http://mirrors.ustc.edu.cn/ubu…

ssh配置文件和ssh命令

ssh:发送数据,并对数据进行加密。默认端口22 ,Secure Shell ssh远程管理登录命令 ssh rootIP 以root用户登录IP这台主机实验中,通过虚拟机中的centos7(作为客户端)去远程登录阿里云管理的主机(作为服务器端),因为ssh是利…

Mac中git ssh配置

一、查看是否已配置 1.cd ~/.ssh ->进入ssh目录 如果不能进入该目录,说明没生成过,则需要使用命令2检查配置 2. git config --list ->检查下是否配置过git账户 3. ls ->查看ssh具体内容 如果ssh文件夹中有id_rs…

linux配置SSH

目录 一 ssh简介 二 ssh配置文件 三 ssh远程登录 四 ssh远程登录原理 4.1 对称加密 4.3非对称加密 一 ssh简介 SSH为建立在应用层上的安全协议,SSH是目前非常可靠,专门为远程登录会话和其它网了服务提供安全性的协议。利用SSH可以有效防止远程管理…