Python のような高水準言語でビット単位の演算子を使用する理由を理解するのに苦労しています。高水準言語と低水準言語について私が学んだことから、高水準言語は通常、コンピューターに入るマシン コードについてあまり心配する必要がないように設計されているということです。私の知る限り、それを避けるように設計された言語でプログラムを少しずつ操作する意味がわかりません。
3 に答える
標準ライブラリで使用されているビット演算子の具体例が必要な場合は、re
ライブラリを参照してください。 API によると、フラグはビットごとにOR
一緒に編集されることになっています。
これにより、1 つの引数で多数のオプションを渡すことができます。次のオプションを検討してください。
re.compile(expression,re.I | re.M | re.X)
対。
re.compile(expression,ignorecase=True,multiline=True,verbose=True)
少なくとも、最初のバージョンの方がはるかにコンパクトであることに同意できると思います。
「まあ、私は 2 番目の方が好きです。結局、2 番目の方がより明確です!」と思うかもしれません。...そして、あなたはそのためのケースを持っているかもしれません. しかし、C でバイナリ ファイルを生成した同僚がいて、ファイルのヘッダーに 32 ビットの整数フィールドが含まれており、その整数フィールドにはファイルの残りの部分をデコードするために必要なフラグが格納されていると言われたらどうでしょうか? あなたは合理的な人であり、データを簡単かつ効率的に操作できる高水準言語でファイルを操作したいので、Python を選択します。C を使用してファイルをデコード/分析する必要がないように、ビット単位の操作を実行できることを嬉しく思います。
Python では、ビット単位の操作が間違いなく使用されます。mgilson の言及のような -ing フラグは別or
として、CAN メッセージのパケット ヘッダーを構成するために自分でそれらを使用しました。多くの場合、下位レベルのメッセージ プロトコルのヘッダーは、8 ビットの倍数ではない長さのフィールドで構成されているため、1 つのフィールドのみを変更する場合は、ビット単位の演算子が必要になります。
Python が高水準言語であるからといって、それを使って低水準のことができないわけではありません!