Pythonの^演算子とは?XOR(排他的論理和)の仕組みと使い方を解説
Pythonにおける ^ 演算子は、排他的論理和(EXOR / XOR) を求めるためのビット演算子です。この演算子は2つの整数をビット単位で比較し、対応するビットが「片方だけ1」の場合に1を返し、「両方が1」または「両方が0」の場合には0を返します。
XOR演算の基本ルール
各ビットに対する演算結果は以下の通りです。
- 0 ^ 0 → 0
- 0 ^ 1 → 1
- 1 ^ 0 → 1
- 1 ^ 1 → 0
具体例:60 と 13 のXOR演算
例として、a = 60(2進数で 00111100)、b = 13(2進数で 00001101)とした場合、a ^ b の結果は 49(2進数で 00110001)になります。対応するビットが異なる位置だけが1になっていることが確認できます。
>>> a=60 >>> bin(a) '0b111100' >>> b=13 >>> bin(b) '0b1101' >>> c=a^b >>> bin(c) '0b110001'
また、小さな数値との演算例も見てみましょう。60(0b111100)と 2 のXORを取ると、下位2ビットが反転して 0b111110(62)になります。
>>> a=60 >>> b=a^2 >>> bin(b) '0b111110'
XOR演算子の主な用途
- ビットの反転: 特定のビットだけを切り替えたい場合に利用できます。
- 値の交換: 一時変数を使わずに2つの変数の値を入れ替えるテクニックに使われます。
- 暗号化・チェックサム: 同じ鍵で2回XORを適用すると元の値に戻る性質を利用したシンプルな暗号化やデータ検証に応用されます。
- 重複検出: リスト内で1つだけ奇数回出現する要素を見つけるアルゴリズムなどに活用されます。
このように、Pythonの ^ 演算子は論理演算の or や and とは異なるビット単位の排他的論理和である点に注意してください。ブール値に対して使う場合は True ^ False のように動作しますが、一般的には整数のビット操作に使用されます。
-
Pythonの名前空間とは?仕組みとスコープの関係をわかりやすく解説
Pythonにおける名前空間の基本名前空間(namespace)とは、変数名とオブジェクトを対応付ける仕組みであり、スコープ(名前の有効範囲)を実現するための基盤となるものです。Pythonでは、パッケージ、モジュール、クラス、関数、メソッドなど、それぞれが独自の「名前空間」を持ち、その中で変数名が解決されます。名前空間の生成と破棄関数やモジュール、パッケージが評価されて実行が始まると、そのための新しい名前空間が作成されます。これは「評価コンテキスト」と捉えると理解しやすいでしょう。そして、関数などの実行が終了すると、その名前空間は破棄され、そこに含まれていた変数も一緒に消えます。さらに、ロー
-
Pythonの無名関数(ラムダ式)とは?基本構文と実用的な使い方をわかりやすく解説
Pythonにおける無名関数とは Pythonにおける無名関数(匿名関数)とは、その名のとおり「関数名を持たない関数」のことです。通常の関数は def キーワードを使って定義しますが、無名関数は lambda キーワードを使って定義します。このため、無名関数は「ラムダ関数」あるいは「ラムダ式」とも呼ばれています。 ラムダ式の基本的な構文 ラムダ式は次のような形式で記述します。 lambda 引数: 式 引数を受け取り、コロン(:)以降の式の評価結果を自動的に返り値として返します。return 文を書く必要がない点が特徴です。 # 通常の関数定義 def square(x): ret