1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PythonからC言語を実行してみよう!~ビット反転のCコードを例

Posted at

PythonからC言語を実行してみよう!~ビット反転のCコードを例に~

Pythonは高レベルで柔軟なスクリプト言語ですが、低レベルな処理(例えばビット演算ハードウェア寄りの制御)にはC言語がよく使われます。この記事では、PythonからC言語コードを生成し、コンパイル・実行する方法をご紹介します。

やりたいこと

C言語でよく見られる「32bit整数のビット反転(bit reversal)」処理をPythonから実行してみます。


Cのビット反転コード

まずは、C言語で書いた32ビット整数のビットを逆順にする関数 reverse_bits を定義します。

#include <stdio.h>
#include <stdint.h>

uint32_t reverse_bits(uint32_t n) {
    uint32_t result = 0;
    for (int i = 0; i < 32; ++i) {
        result <<= 1;
        result |= (n & 1);
        n >>= 1;
    }
    return result;
}

int main() {
    uint32_t value = 0b00000000000000000000000000001111;
    uint32_t reversed = reverse_bits(value);
    printf("Original: %u\n", value);
    printf("Reversed: %u\n", reversed);
    return 0;
}

PythonからこのCコードを実行!

Python側では、以下の手順でCコードを動かします:

  1. Cコードを文字列として定義し、.cファイルに保存
  2. gccでコンパイル
  3. 実行して標準出力を取得
import subprocess

# CコードをPython文字列として記述
c_code = """
#include <stdio.h>
#include <stdint.h>

uint32_t reverse_bits(uint32_t n) {
    uint32_t result = 0;
    for (int i = 0; i < 32; ++i) {
        result <<= 1;
        result |= (n & 1);
        n >>= 1;
    }
    return result;
}

int main() {
    uint32_t value = 0b00000000000000000000000000001111;
    uint32_t reversed = reverse_bits(value);
    printf("Original: %u\\n", value);
    printf("Reversed: %u\\n", reversed);
    return 0;
}
"""

# Cコードをファイルに保存
with open("bit_reverse.c", "w") as f:
    f.write(c_code)

# GCCでコンパイル
subprocess.run(["gcc", "bit_reverse.c", "-o", "bit_reverse"])

# 実行し、結果を取得
result = subprocess.run(["./bit_reverse"], capture_output=True, text=True)
print(result.stdout)

実行結果(例)

Original: 15
Reversed: 4026531840

この結果は、0b00000000000000000000000000001111(=15)をビット反転して、0b11110000000000000000000000000000(=4026531840)となっていることを示しています。


まとめ

  • PythonからCコードを動的に生成して実行することが可能
  • subprocess モジュールで コンパイル実行 を制御
  • Cならではの 低レベルな処理 をPythonスクリプトの中で利用可能

このように、PythonとCを組み合わせることで、ハードウェア寄りの計算や処理をスクリプト上で柔軟に扱うことができます。特に、ビット演算パフォーマンス重視の処理には有効です!


1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?