Pythonで16ビット整数の2の補数を求める方法
Pythonでは、数値の下位16ビットだけを反転(ビット反転)したい場合、その数値と 65535(2進数で16個すべてが「1」に相当する値、すなわち 0xFFFF)とのXOR(排他的論理和)を計算します。さらに2の補数を求めたい場合は、その結果に1を加えるだけで完了です。
基本的な考え方
2の補数は、負の整数をビット列で表現するための標準的な方法です。手順は以下の2ステップです。
- 対象の数値と 65535(0xFFFF)をXORして、下位16ビットを反転させる(1の補数を求める)。
- 結果に1を加えて、2の補数を得る。
コード例
a = 3 # 2進数では 11 b = (a ^ 65535) + 1 print(bin(b))
実行結果
このコードを実行すると、次の出力が得られます。
0b1111111111111101
解説
この例では、a = 3(2進数で 0b11)に対して処理を行っています。まず a ^ 65535 によって下位16ビットが反転され 0b1111111111111100 となり、そこに1を加えることで 0b1111111111111101 が得られます。これは16ビットの2の補数表現における -3 に相当します。
なお、Pythonの整数は任意精度であるため、この手法を使うことで、特定のビット幅(ここでは16ビット)における2の補数表現を明示的にシミュレートできます。同様の方法は8ビットなら255(0xFF)、32ビットなら4294967295(0xFFFFFFFF)とのXORでも応用可能です。
-
PythonのMatplotlibでシグナル(信号)をプロットする方法を徹底解説
PythonのMatplotlibとNumPyを組み合わせると、ノイズを含むシグナル(信号)を簡単に可視化できます。本記事では、正弦波にランダムノイズを重ねたシグナルをプロットする具体的な手順を、コード例とともにわかりやすく解説します。 シグナルをプロットする基本手順 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を自動調整します。 結果の再現性を確保するため、乱数シードを設定します。 サンプリング間隔 dt を初期化し、そこからサンプリング周波数 Fs を算出します。 np.arange() を使って時間軸 t のデータ点を作成します。 NumPyを利用してノイズ成分 n
-
Pythonでテキストファイルから指定した文字数だけ読み込む方法
Pythonでテキストファイルから指定した文字数だけ読み込む方法Pythonでファイルの内容を読み込むには、ファイルオブジェクトの f.read(size) メソッドを使用します。このメソッドは指定した量のデータを読み込み、文字列として返します。f.read(size) の基本的な動作size は省略可能な数値引数です。その挙動は以下のとおりです。size を省略した場合、または負の値を指定した場合: ファイル全体の内容が読み込まれ、返されます。size に正の数値を指定した場合: 最大で size バイト分のデータが読み込まれ、返されます。ファイルの末尾に達している場合: f.read()