【Java】XOR(排他的論理和)とは?使い方や暗号化について紹介します!
  • facebookページ
  • twitterページ
  • 2021.04.30

    【Java】XOR(排他的論理和)とは?使い方や暗号化について紹介します!

    ビット演算子「XOR(排他的論理和)」の使い方

    XOR(排他的論理和)は、下記のように演算子の左辺・右辺のビットを比べた上で、同じ場合は 0 に、異なる場合は 1 にする演算子です。

    • 1 XOR 1 = 0
    • 1 XOR 0 = 1
    • 0 XOR 1 = 1
    • 0 XOR 0 = 0

    XOR演算子は「^」で表せます。

    例えば、22(0x16)と75(0x4B)の XOR は次のように計算できます。

    このように、演算子(XOR)の左辺と右辺の値をビット単位で比べ、同じ場合は0に、異なる場合は1になっています。

    計算すると、93(0x5D)という値になりました。

    ポテパンダの一言メモ

    つまり、XORには以下のような性質があります。

    1. A XOR B XOR … XOR Z のように XOR を演算した場合、A, B, …, Z の中で 1 が奇数個の時は結果が 1、偶数個の時は結果が0となる
    2. A XOR A = 0
    3. A XOR B = 0 であれば A = B

    その他のビット演算子の使い方

    ビット演算子には、XOR 以外にもいくつか存在します。

    ここでは、その他のビット演算子についても簡単に確認しましょう。

    意味 演算子
    排他的論理和(XOR) ^
    論理積(AND) &
    論理和(OR) |
    反転(NOT) ~

    論理積(AND)

    AND(論理積)は、下記のように演算子の左辺・右辺のビットを比べた上で、両方が 1 の場合に結果を 1 にする演算子です。

    • 1 AND 1 = 1
    • 1 AND 0 = 0
    • 0 AND 1 = 0
    • 0 AND 0 = 0

    AND演算子は「&」で表せます。

    例えば、22(0x16)と75(0x4B)の AND は次のように計算できます。

    論理和(OR)

    OR(論理和)は、下記のように演算子の左辺・右辺のビットを比べた上で、一方が 1 の場合に結果を 1 にする演算子です。

    左辺・右辺ともに 0 の場合に、結果も 0 になる演算子とも言えます。

    • 1 OR 1 = 1
    • 1 OR 0 = 1
    • 0 OR 1 = 1
    • 0 OR 0 = 0

    OR演算子は「|」で表せます。

    例えば、22(0x16)と75(0x4B)の OR は次のように計算できます。

    反転(NOT)

    反転(否定)は、演算子が 1 の場合に結果を 0 に、演算子が 0 の場合に結果を 1 にする演算子です。

    AND演算子は「~」で表せます。

    例えば、22(0x16)の NOT は次のように計算できます。

    Java XORのサンプルコード

    では実際に、Javaで XOR の計算結果を確認しましょう。

    サンプルコードは次の通りです。

    上記のプログラムを実行すると、次の実行結果を得られます。

    ここまでの説明であった計算結果と、同じになっているのがわかります。

    XORでも用いる「boolean」について

    XOR で各桁を比較する際の結果は必ず boolean型 になります。

    ここでは、boolean型について少しおさらいしておきましょう。

    Javaのboolean型は、「真偽値型」とも呼ばれ、値は「true」もしくは「false」のいずれかのデータのみが設定されるデータ型です。

    boolean型に「null」を設定することはできず、必ず true か false が設定されます。

    booleanは主に、条件によって処理を分岐させたい場合の判定として利用することが多いです。

    そのため、Javaプログラミングにおいて利用する機会も多いと言えますね。

    覚えておいて損のない仕組みです。

    では実際に、Javaのサンプルコードで動きを確認してみましょう。

    上記のプログラムを実行すると、次の実行結果を得られます。

    bool と isResult が true か false かによって、表示される文言を切り替えているのがわかります。

    XORを使った暗号化について

    XOR(排他的論理和)の性質を利用して暗号化も可能です。

    仕組みとしては下記の通り。

    • A(暗号化するもの) ^ B(暗号化するキー) = C(暗号化したもの)
    • C ^ B = D(復元したもの)
    • A = D

    ここでは、参考までにJavaでXORを使った暗号化コードを紹介します。

    上記のプログラムを実行すると、下記のような結果になります。

    「排他的論理和」という言葉を、「演算子」というキーで「27>?」に暗号化できました。

    復元処理を行うことで、再び「排他的論理和」という言葉に戻せています。



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE