zoukankan      html  css  js  c++  java
  • 异或运算法则

    1. a ⊕ a = 0
    2. a ⊕ 0 = a
    3. a ⊕ b = b ⊕ a
    4. a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;
    5. d = a ⊕ b ⊕ c 可以推出 a = d ⊕ b ⊕ c.
    6. a ⊕ b ⊕ a = b.
    7.若x是二进制数0101,y是二进制数1011
    则x⊕y=1110
    只有在两个比较的位不同时其结果是1,否则结果为0
    即“两个输入相同时为0,不同则为1”!
    输入
    运算符
    输入
    结果
    1
    0
    1
    1
    1
    0
    0
    0
    0
    0
    1
    1

    其它语言不同,C语言和C++语言的异或不用xor,而是用“^”,键入方式为Shift+6。(而其它语言的“^”一般表示乘方)

    若需要交换两个变量的值,除了通常使用的借用中间变量进行交换外,还可以利用异或,仅使用两个变量进行交换,如:
    1
    2
    3
    a=a^b;
    b=b^a;
    a=a^b;
    详解:
    1
    2
    3
    a1=a^b
    b=a1^b
    a=a1^b=a1^(a1^b)=a1^a1^b=b
    注意:
    1
    a=a^b^(b=a);//此类形式是不正确的UB行为,在不同编译器中会有不同的结果,切勿使用
    这样就完成了a与b的交换。
    综上:同一变量与另一变量和其异或值异或等于自身。

    用例:可使用于加密算法某一环节或更多环节,使算法更复杂,不易被破解,安全性更高

  • 相关阅读:
    BZOJ3790 神奇项链
    Tarjan求Lca
    Manacher算法--Poj3974
    [Usaco2015 Feb]Censoring
    扩展Kmp
    Ural1297 最长回文串
    [Usaco2007 Dec] 队列变换
    Pku2774 最长公共子串
    Spoj 694 Distinct Substrings
    Pku1734 Musical Theme 不可重叠最长重复子
  • 原文地址:https://www.cnblogs.com/zhoug2020/p/5041016.html
Copyright © 2011-2022 走看看