質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1594閲覧

pythonでビットマスクを作りたい

fu_3823

総合スコア81

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2021/07/24 00:12

pythonでbit操作の勉強をしています。
ビットマスクを作るために、以下のようなコードを書きました。
そのマスクを使って、10000000000の、2から6ビットまでを10011で置き換えようとしています。

Python

1def bitmask(n: int, m: int, i: int, j: int): 2 a = ~0 #..11111 3 left = a << (j + 1) # 4 right = (1 << i) - 1 #..000011 5 mask = left | right 6 7 m_shifted = m << i 8 print(bin(m_shifted)) 9 n = n | mask 10 ans = m_shifted | n 11 return ans 12 13 14if __name__ == "__main__": 15 res = bitmask(10000000000, 10011, 2, 6) 16 print(bin(res))

この結果、
res:-0b10001となります。
意図しているのは10001001100ですが、どこがおかしいのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

return (n & ~0x7c) | 0x4c

投稿2021/07/24 01:33

y_waiwai

総合スコア87800

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

こちらでいかがでしょうか。

diff

1 def bitmask(n: int, m: int, i: int, j: int): 2 a = ~0 #..11111 3 left = a << (j + 1) # 4 right = (1 << i) - 1 #..000011 5 mask = left | right 6 7 m_shifted = m << i 8 print(bin(m_shifted)) 9- n = n | mask 10+ n = n & mask 11 ans = m_shifted | n 12 return ans 13 14 15 if __name__ == "__main__": 16- res = bitmask(10000000000, 10011, 2, 6) 17+ res = bitmask(0b10000000000, 0b10011, 2, 6) 18 print(bin(res))

投稿2021/07/24 00:27

actorbug

総合スコア2235

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fu_3823

2021/07/24 04:31

ありがとうございます。 二箇所とも基本的なミスすぎて恥ずかしい限りです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問