位运算异或^的奇技淫巧

简介: 位运算异或^的奇技淫巧

^异或的性质

1、交换律  a^b==b^a

2、结合律  (a^b)^c==a^(b^c)

3、对于任何数x,都有x^x=0,x^0=x,同自己求异或为0,同0异或为自己

4、A^A^B=B,连续和同一个因子做异或运算,最终结果为自己!


异或^的例题

一、找出唯一成对的数


image.png

思路:

本题只有一个数是成对的,其余数全部单独出现。因此我们可以让这1001个数自己跟自己^,此时单独的数全部成对,而唯一成双的数变成了3个数,,此时根据异或运算的性质,成双的数全部变成0;只有奇数个数,异或后才是自己

编程实现:

首先需要按照题目要求创建一个数组存放1~1000的数,且需要重复一个,可以利用生成随机数实现。

接着利用循环,将数组的数两次^

image.png

二、找出唯一落单的数

将所有成员进行^,相对第一道题更加简单

相关文章
|
7月前
|
算法 测试技术 C++
【位运算 拆位法】1835. 所有数对按位与结果的异或和
【位运算 拆位法】1835. 所有数对按位与结果的异或和
|
7月前
|
算法
异或算法
异或算法
|
7月前
leetcode:231. 2 的幂(位运算)
leetcode:231. 2 的幂(位运算)
27 0
|
7月前
[leetcode 数位运算] 2939. 最大异或乘积 M
[leetcode 数位运算] 2939. 最大异或乘积 M
|
算法 C++
剑指offer(C++)-JZ65:不用加减乘除做加法(算法-位运算)
剑指offer(C++)-JZ65:不用加减乘除做加法(算法-位运算)
|
算法 C++
剑指offer(C++)-JZ16:数值的整数次方(算法-位运算)
剑指offer(C++)-JZ16:数值的整数次方(算法-位运算)
|
机器学习/深度学习 算法
算法提升(二) 异或法
算法提升(二) 异或法
334 2
算法提升(二) 异或法
|
存储 算法
经典算法之异或运算(无进位相加)
经典算法之异或运算(无进位相加)
经典算法之异或运算(无进位相加)
求实数的整数次幂(循环版)(高效)(位运算解题)
说明:参数 x 为底数,n 为指数。若参数正确,则函数值为 x 的 n 次幂。若参数不正确(当底数为 0 且指数为 0 或负数时无意义),则报告错误,函数值为0。// 这个位运算是大部分都不熟悉也不敢用的东西,但是确实是编程里面的一个非常重要的工具。请编写函数,用循环语句以最快的方法求任意实数的任意整数次幂。要求:不得调用 pow 函数,不得使用递归方法。指数 二进制 公式。
226 0
求实数的整数次幂(循环版)(高效)(位运算解题)
C | 妙用异或
异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:`0+0=0`,`1+0=1`,`0+1=1`,`1+1=0`(==相同为`0`,相异为`1`==),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。
108 0
C | 妙用异或