当前位置:首页 > 上门服务 >

异或运算如何反解(异或运算是怎么计算的)

来源:原点资讯(m.360kss.com)时间:2024-01-02 11:54:43作者:YD166手机阅读>>

异或(^) 这个位操作运算符相信大家一定都不陌生,这个运算符可以用来解决很多普通算法解决不了的问题,而且位运算是直接对二进制码做运算,相对普通的加减乘除运算符来说的话更加的高效,我们借着题目一起来看看。

1

对两个输入参数做加法运算,但是不能使用 “ ” 运算符 。

解法思路

看到这样的问题,能想到的只有位运算,问题是怎么算?相信大家小学刚学习加法的时候,对于一下子不能得到答案的题,肯定会在草稿纸上列竖式,从右向左算,同一列对下来的数字相加如果超过 10,那么肯定要在下面写两个数字相加后的个位数,然后往前进一位,下一位运算时就要加上这个进位,用这样的方式直到最后算出结果。这题的思路也是一样的,只不过有两点不一样,第一,10 进制变成了 2 进制,第二,我们不再是在草稿纸上列竖式,而是要写成计算机看得懂的代码,这就得借助我们的位运算了,因为 2 进制表示的数中只会出现 0 和 1,你可以把这两个数看成是 true 和 false,这样更好理解,我们可以先通过异或塞选出不用进位的情况,然后再用与运算和左移运算计算出进位的情况,迭代更新出最后的结果。

参考代码

public int plus(int a, int b) { int aTemp = 0, bTemp = 0; while (b != 0) { aTemp = a ^ b; bTemp = (a & b) << 1; a = aTemp; b = bTemp; } return a; }

02

如何在不创建临时变量的情况下进行交换两个数?

解法思路

异或的常见应用,很简单,但是注意思考角度从位出发,而不是数,这点很重要。

参考代码

public void swap(int a, int b) { a ^= b; // a 中存放两数互异的点位 b ^= a; // 取反 b 中不同于 a 的点位,也就是实现了 b = a a ^= b; // 取反 a 中不同于 b 的点位,也就是实现了 a = b }

03

如果把 A 转换成 B ,需要改变多少位?

解法思路

异或的简单应用,两个数做异或的结果就是两个数差异所在,然后只需计算这个结果中有多少个 1 即可。

参考代码

public int convertA2B(int A, int B) { int n = A ^ B; int count = 0; while (n != 0) { n = n & (n - 1); // n - 1 是将 n 的最低位为零 count ; } return count; }

04

LeetCode 第 136 号问题:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

解法思路

异或的三个点顺下来,就可以很清楚地解这道题:

异或运算和乘法一样,位置和运算顺序不影响最后结果:a^b^c = b^c^a

两个相同的数做异或运算结果为零:a^a = 0

任何数和零做异或结果还是这个数本身:a^0 = a

参考代码

public int findOnce(int[] arr) { int result = 0; for (int i = 0; i < arr.length; i) { result ^= arr[i]; } return result; }

05

LeetCode 第 137 号问题:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。

解法思路

这题的难点在于 3 次,如果把数组里面的数字就当作数字本身来看的话,很难找到突破口;如果想到了位运算,那就要有一个概念就是位运算是基于位的,而不是基于数的,在这个问题中,所有的 bit 的出现次数只会有两种情况,3*n,3*n 1,这里的 n 是任意整数,假设你遍历数组,其实会有一个中间态就是 3*n 2 存在,对于除这个数以外的其他数,过程大概是 3*n 1 -> 3*n 2 -> 3*n,我们只要记录的就是 3*n 1 和3*n 2的情况,因为 3*n 其实就是一个初始状态(n=0),记不记录和我们最后要返回的答案无关,而记录 3*n 2 是为了恢复一些 bit 从 3*n 2 到 3*n

参考代码

public int singleNumber(int[] nums) { int ones = 0, twos = 0; for (int i = 0; i < nums.length; i) { // 找出当前的 3n 1 ones = (nums[i] ^ ones) & (~twos); // 找出当前的 3n 2 twos = (nums[i] ^ twos) & (~ones); } return ones; }

06

LeetCode 第 260 号问题:给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。找出只出现一次的那两个元素。

解法思路

这题的主要难点是如何把两个数给拆出来,如果直接运用异或算法,我们最后得到的结果是两个数做异或的结果,关键点是如何基于这个异或的结果来找到这两个数,有一点很重要的就是,异或的结果为 1 的点位只会出现在其中一个数中,我们可以用其中一个为 1 的点位作为判断依据,这个点位存在的所有数在一起做异或,这个点位不存在的所有数一起做异或,这样就把这个问题拆解成了两个 problem 3。

参考代码

public int[] singleNumber(int[] nums) { if (nums == null || nums.length == 0) { return new int[2]; } int different = 0; for (int i : nums) { different ^= i; } different &= -different; int[] ans = {0, 0}; for (int i : nums) { if ((different & i) == 0) { ans[0] ^= i; } else { ans[1] ^= i; } } return ans; }

总结

位运算相对其他的运算来说更加的高效,异或在位运算中的应用非常广,但是这里的难点是我们平时可能会忽视位运算,导致我们遇到一般的问题不会往位运算的方向去想,另外就是如果对二进制的运算不熟,我们也很难理解一些位运算的综合操作,这里提到了异或可以交换两个数,做加法操作,还可以用来解决一些问题。

栏目热文

逻辑运算三种表示方法(逻辑运算有哪三种表示方法)

逻辑运算三种表示方法(逻辑运算有哪三种表示方法)

一、什么是逻辑电路所谓“逻辑”,在这里是指事物间的因果关系。当两个二进制数码表示不同的逻辑状态时,它们之间可以按照指定的...

2024-01-02 11:31:42查看全文 >>

异或运算表达式(运算异或运算)

异或运算表达式(运算异或运算)

C中有按位逻辑运算符:按位取反、按位与、按位或、按位异或。这4个运算符可以用于整型,包括char类型。按位操作针对每一个...

2024-01-02 11:27:00查看全文 >>

异或运算的逻辑表达式是(或运算的逻辑表达式是什么)

异或运算的逻辑表达式是(或运算的逻辑表达式是什么)

4个按位逻辑运算符都用于整型数据,包括char。之所以叫作按位(bitwise)运算,是因为这些操作都是针对每一个位进行...

2024-01-02 11:22:40查看全文 >>

逻辑异或公式推导(逻辑或与非的运算公式)

逻辑异或公式推导(逻辑或与非的运算公式)

之前探讨了关于计算机是怎样一步步被人类不断推进演变的过程,今天,我们将从抽象层面带大家感受一下计算机复杂的一面。从昨天讲...

2024-01-02 11:57:00查看全文 >>

异或逻辑表达式计算例子(异或逻辑表达式化简公式)

异或逻辑表达式计算例子(异或逻辑表达式化简公式)

前言:前面我们介绍了SCL语言的基本概念,接下来我们来看一下,SCL语言中的表达式与运算符,以及运算优先级的相关知识点。...

2024-01-02 11:33:37查看全文 >>

模拟器观战人数已达上限(模拟器为什么不能在房间观战)

模拟器观战人数已达上限(模拟器为什么不能在房间观战)

来源:新京报为吸引玩家购买,游戏外挂有各种效果展示。记者在网上搜索时,发现各种游戏外挂购买方式。“感觉随时都能遇到开挂玩...

2024-01-02 11:33:28查看全文 >>

模拟器为什么不能观战手机玩家(模拟器怎么观战手机玩家)

模拟器为什么不能观战手机玩家(模拟器怎么观战手机玩家)

刺激战场模拟器过检测匹配手机是很容易被封号的相信大家都知道,最近封的也比较严格,其他吃鸡手游全军出击和荒野行动也是一样...

2024-01-02 11:14:17查看全文 >>

模拟器如何限制队友(大神模拟器怎么屏蔽队友)

模拟器如何限制队友(大神模拟器怎么屏蔽队友)

硬核FPS游戏通关率仅有2.8%。如果你一个人通关了建议你看一下心理医生。花了两晚大约五个小时摸索终于和朋友通了第一层,...

2024-01-02 11:30:28查看全文 >>

吉利新金刚收音机拆解视频(吉利金刚如何自己更换收音机)

吉利新金刚收音机拆解视频(吉利金刚如何自己更换收音机)

爱华收音机 CR-D08,号称黑金刚,带爱华的DSL音效,音质非常不错。价格现在闲鱼上也比较刚,想拥有它还得好几百。电调...

2024-01-02 11:24:20查看全文 >>

吉利金刚收音机复位(吉利金刚收音机怎么调音)

吉利金刚收音机复位(吉利金刚收音机怎么调音)

上海别克音响断电后解锁功能按以下步骤输入密码,在任何两个步骤之间停顿不要超过(15S)1、当接通点火开关时,显示屏显示 ...

2024-01-02 11:40:38查看全文 >>

文档排行