pythonで二進数にマスクかけたりする

例えば

>>> flags1 = 100111101
>>> flags2 = 000101111

これで

>>> mask(flags1, 111110000)
100110000
>>> or(flags1, flags2)
100111111

とかできるようにしたい

例えばmaskなら

>>> format(int(str(flags1),2) & int(str(111110000),2),"b")
100111111

って感じの関数を書けばできるけどなんか長いしわかりづらい
速度も遅そうだし(何が速度を決めるのかよくわかってない)、
いちいちこんな長ったらしいの書くのもめんどくさいし(関数にしちゃいえばいいんだけど)、
もっといいやり方ないのかな〜

2013-01-29追記
コメントより
>>> flags1 = 0b100111101
>>> flags2 = 0b000101111

>>> bin(flags1 & 0b111110000)
’0b100110000′
>>> bin(flags1 | flags2)
’0b100111111′

で行けるかと思います。
(Python2.6以上であれば)

できた!ありがとうございます!

広告

3件のコメント on “pythonで二進数にマスクかけたりする”

  1. >>> flags1 = 0b100111101
    >>> flags2 = 0b000101111

    >>> bin(flags1 & 0b111110000)
    ‘0b100110000’
    >>> bin(flags1 | flags2)
    ‘0b100111111’

    で行けるかと思います。
    (Python2.6以上であれば)

    • airtoxin より:

      おお、頭に0bをつけると2進数であつかってくれるんですね。
      解決しました!ありがとうございます。

      • いえいえ、礼には及びませんよー
        Pythonをこよなく愛する身として、
        ついついでしゃばって教えたくなってしまっただけですので笑


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中