Python
 Computer >> コンピューター >  >> プログラミング >> Python

正の整数のビットを反転するPythonプログラムの書き方

Pythonで正の整数のビット順を逆にするには、まず bin() 関数を使って数値を2進数に変換します。bin() は変換結果の先頭に「0b」というプレフィックスを付加するため、その最初の2文字を除外し、残りの部分を反転させます。さらに、指定されたビットサイズに合わせて、反転した文字列の末尾に0を補完します。最後に、反転した2進数の文字列を整数へと変換し直すことで、ビットが反転された値が得られます。

アルゴリズム

integernumber(n, bit_size)
/* n は対象の数値、bit_size はビットサイズ */
ステップ1: まず bin() 関数で数値を2進数に変換する。
ステップ2: 2進数表現の文字列から先頭の2文字(0b)を除き、残りを反転する。
ステップ3: 反転した文字列の末尾に、bit_size との長さの差分だけ「0」を追加する。
ステップ4: 文字列の末尾から左方向へ2番目の文字まで反転して並べる。
ステップ5: 反転後の2進数文字列を整数に変換する。

サンプルコード

# Python Program reverse bits of positive integer number
def integernumber(n, bit_size):
   bin_number = bin(n)
   reverse_number = bin_number[-1:1:-1]
   reverse_number = reverse_number + (bit_size - len(reverse_number)) * '0'
   print("Reverse Bits ::>", int(reverse_number, 2))

# Driver program
if __name__ == "__main__":
   n = int(input("Enter Number ::>"))
   bit_size = int(input("Enter Bit Size ::>"))
   integernumber(n, bit_size)

実行結果

Enter Number ::>1
Enter Bit Size ::>32
Reverse Bits ::> 2147483648

Enter Number ::>2147483648
Enter Bit Size ::>32
Reverse Bits ::> 1

この例では、32ビット幅を前提としています。数値「1」のビットを反転すると、最上位ビットのみが立った「2147483648」になります。逆に「2147483648」を入力すれば「1」に戻ることから、この処理が正しく動作していることが確認できます。スライス記法 [-1:1:-1] を使うことで、「0b」プレフィックスを避けながら文字列を効率的に反転できるのがポイントです。

  1. PythonでN番目のフィボナッチ数を求める方法|再帰と動的計画法を解説

    この記事では、Pythonを使ってN番目のフィボナッチ数を計算する方法を解説します。 フィボナッチ数とは フィボナッチ数は、次の漸化式によって定義される数列です。 Fn = Fn-1 + Fn-2 初期値は F0 = 0、F1 = 1 となります。したがって、フィボナッチ数列の最初のいくつかの項は以下のようになります。 0, 1, 1, 2, 3, 5, 8, 13, ………… フィボナッチ数を求めるには、大きく分けて「再帰」と「動的計画法」の2つのアプローチがあります。それぞれの実装方法をPythonスクリプトで見ていきましょう。 方法1:再帰を使うアプローチ まずは最も直感的な再帰による実

  2. PythonでN番目のカタラン数を計算する方法【再帰・動的計画法】

    本記事では、N番目のカタラン数(Catalan number)を求める方法について解説します。カタラン数とは、以下の漸化式で定義される自然数の数列です。$$c_{0} = 1\;and\; c_{n+1} = \displaystyle\sum\limits_{i=0}^nc_{i} c_{n-i}\; for n\geq 0 ;$$n = 0, 1, 2, 3, … に対するカタラン数は、1, 1, 2, 5, 14, 42, 132, 429, …… と続いていきます。カタラン数は、再帰(リカージョン)と動的計画法(DP)のどちらの手法でも求めることができます。それでは、それぞれの実装方法