56160


`uint8(x ^ y)`

`^` これは、

> ^ bitwise XOR integers

という文法のようですが、

どのようなときに使われるのかがわかりません。


CC BY-SA 4.0
2019-06-27T18:21:13.040
56157
2019-06-27T22:23:57.453
12896
question
go
uint8(x ^ y) がわからない


`uint8( )` の部分は明示的型変換というものなので、これは除外して考えてよいです。

`^` は書いてある通り「ビットごとの排他的論理和」というもので、次の演算となります。

[code]

      bit3210
    x    0011
    y    0101
    ----------
    xor  0110
    
[/code]

２つの値を２進数で表記したときの各ビットが  
\- 一致 (0,0) または (1,1) のとき、結果 0  
\- 不一致 (0,1) または (1,0) のとき、結果 1  
を得ます（これを各ビットごとに行います）

> どのようなときに使われるのかがわかりません。

ビットごとの排他的論理和が必要な時としか書きようがないですね。足し算だって足し算が必要な時に使われる（おそらくその時には乗算は必要ない）のと同じです。必要ない人には一生使う機会はないし、必要な人なら毎日使います。

例を挙げておくと  
[Xorshift 乱数](https://ja.wikipedia.org/wiki/Xorshift)  
[巡回冗長検査](https://ja.wikipedia.org/wiki/%E5%B7%A1%E5%9B%9E%E5%86%97%E9%95%B7%E6%A4%9C%E6%9F%BB)  
[SHA 暗号学的単方向ハッシュ](https://ja.wikipedia.org/wiki/SHA-2)

自分が書くコードに排他的論理和が現れることはないっていう人でも、応用結果であれば毎日使っているでしょうね。


CC BY-SA 4.0
2019-06-27T22:23:57.453
56160
2019-06-27T22:23:57.453
8589
56157
answer