【异或运算】【异或的运算性质】【用异或交换两个数字的值】【利用异或来加密算法】【用异或查找数组中只出现一次的数字LeetCode136】

【异或运算】【异或的运算性质】【用异或交换两个数字的值】【利用异或来加密算法】【用异或查找数组中只出现一次的数字LeetCode136】,第1张

目录

【异或运算介绍】

【异或的运算法则】

【交换两个变量的值】

【利用异或加密算法举例】

【用异或查找数组中只出现一次的数字】

【题目描述】【LeetCode136】

【思路】

【采用代码如下】


 【异或运算介绍】

        “异或”是一个逻辑运算符,异或的数学符号为“⊕”,计算机符号为“xor”。与其他语言不同的一点是,C语言采用“^”表示异或符号,C++既可以采用 xor,又可以采用 “^”;其他语言的“^”一般表示乘方。

        异或运算也叫半加运算,其运算法则相当于不带进位的二进制加法,所以异或运算经常被认为不进位加法。

【异或的运算法则】

0 ⊕ 0 = 0,1 ⊕ 0 = 1,0 ⊕ 1 = 1,1 ⊕ 1 = 0(同为0,异为1)

(1)归零律:a ⊕ a = 0 ;

(2)恒等律:a ⊕ 0 = a ;

(3)交换律:a ⊕ b = b ⊕ a ;

(4)结合律:a ⊕ b ⊕ c = a ⊕ ( b ⊕ c ) = ( a ⊕ b ) ⊕ c ;

(5)自反性:a ⊕ b ⊕ a = a ;

【交换两个变量的值】

        交换两个变量的值通常用的方法是取中间变量,还可以利用异或,仅使用两个变量进行交换。在进行异或运算的时候,首先将数值转换为二进制,对二进制的每一位,进行异或运算。

void swap(int &a,int &b)
{
    a=a^b;
    b=b^a;
    a=a^b;
}  

可以得到:(a^b)^b=a

应用:可以用于加密算法某一环节或更多环节,易于实现,计算成本小。

 【利用异或加密算法举例】

        已知加密的内容为A,密钥为B,则可以用异或加密:C=A^B,在数据中保存C就可以了;如果想解密的话,则:A=C^B,只要知道密钥,即可完成解密。对于字符串的异或,就是对每一个字符进行二进制异或运算。

        简单重复异或加密有时用于不需要特别安全的情况下来隐藏信息,如果使用不断重复的密钥,利用频率分析就可以破解这种简单的异或密码。如果密钥是随机的(不重复的),异或密码就更为安全;如果密钥是真正随机的,结果就是一次性密码本,这种密码在理论上是不可破解的。

【用异或查找数组中只出现一次的数字】 【题目描述】【LeetCode136】

        给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

【思路】

        根据(a^b)^b=a,利用for循环,将nums[0]当做 b ,逐个进行异或 *** 作,则 a 就是那个只出现一次的数字。

【采用代码如下】
class Solution {
public:
    int singleNumber(vector& nums) {
        int res=nums[0];
        for(int i=1;i

撒花完结!

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/921218.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)