【Python】数値が2のべき乗か判定する方法

この記事では、Pythonを使って数値が2のべき乗かどうかを判定する方法を紹介します。

ビット演算やビットシフト演算、対数を使った方法など、様々なアプローチを通じて、数値が2のべき乗かどうかを簡単に理解することができます。

目次から探す

Pythonを使った数値が2のべき乗か判定する方法

ビット演算を利用する方法

Pythonを使って数値が2のべき乗かどうかを判定する方法の一つに、ビット演算を利用する方法があります。

具体的には、2のべき乗の数値は2進数表記した際に1が1つだけ存在する特徴を利用します。

以下にサンプルコードを示します。

def is_power_of_two(num):
    return num & (num - 1) == 0 and num != 0

# 数値が2のべき乗かどうかを判定
num = 16
if is_power_of_two(num):
    print(f"{num}は2のべき乗です")
else:
    print(f"{num}は2のべき乗ではありません")
16は2のべき乗です

上記のサンプルコードでは、is_power_of_two関数を定義し、与えられた数値が2のべき乗かどうかを判定しています。

ビットシフト演算を利用する方法

もう1つの方法として、ビットシフト演算を利用する方法があります。

2のべき乗の数値は2進数表記した際に1が1つだけ存在するため、右シフト演算を繰り返すことでその特徴を利用して判定します。

以下にサンプルコードを示します。

def is_power_of_two(num):
    if num <= 0:
        return False
    return num & (num - 1) == 0

# 数値が2のべき乗かどうかを判定
num = 8
if is_power_of_two(num):
    print(f"{num}は2のべき乗です")
else:
    print(f"{num}は2のべき乗ではありません")
8は2のべき乗です

上記のサンプルコードでは、is_power_of_two関数を定義し、与えられた数値が2のべき乗かどうかをビットシフト演算を用いて判定しています。

ログを使った方法

最後に、ログを使った方法も紹介します。

2のべき乗の数値は対数を取った際に整数となる特徴を利用して判定します。

以下にサンプルコードを示します。

import math

def is_power_of_two(num):
    if num <= 0:
        return False
    return math.log2(num).is_integer()

# 数値が2のべき乗かどうかを判定
num = 4
if is_power_of_two(num):
    print(f"{num}は2のべき乗です")
else:
    print(f"{num}は2のべき乗ではありません")
4は2のべき乗です

上記のサンプルコードでは、is_power_of_two関数を定義し、与えられた数値が2のべき乗かどうかを対数を取ることで判定しています。

終わりに

以上で、Pythonを使った数値が2のべき乗か判定する方法について紹介しました。

ビット演算やビットシフト演算、対数を使った方法など、様々なアプローチがありますので、適切な方法を選んで利用してみてください。

目次から探す