問題タブ [bitflags]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - ビット フラグの単純なブール演算子
これについてもっと学び、プロジェクトに実装しようとしています。
私は現在、基本的にこれを持っています:
今、もう少し複雑なことをしたいと思っています。やりたいことは、次のような 3 つのフラグを適用することです。
そして、フラグ0x1を削除し0x2てから?私は、ビット単位の NOT を適用して (およびビット単位の AND を適用して)、次のようなことができると考えました。
どうやら彼らはそこに残っているか、私がチェックするとどちらかの方法で残っています。
ビットフラグに存在しないかどうかを確認する方法もわかりません(したがって、以前のコードが機能するかどうかを確認できません)。
最近の検索では、これに当てはまるリソースが見つかりません。他の人に教えるためにこれを学びたいと思っています。本当に興味があります。これが紛らわしいまたは単純な場合はお詫び申し上げます。
c++ - C ++でセーフ(r)ビットフラグを入力しますか?
古い C++ コードを修正しているときに、列挙型として定義されたいくつかのビットフラグに出くわしました。
これは珍しいことではありませんが、フラグを結合し始めるとすぐに型情報が失われるのが気になりました。
SO を検索したところ、これに悩まされているのは私だけではないことがわかりました。
代替手段の 1 つは、フラグを #defines または const 積分として宣言することです。そのため、ビット単位の操作では型が変換されません (おそらく)。これの問題は、ビットセットが int やその他の列挙型を介して無関係なフラグと混ざり合うことを可能にすることです。
私はstd::bitsetとboost::dynamic_bitsetに精通していますが、どちらも私の問題に対処するようには設計されていません。私が探しているのは、C# のFlagsAttributeのようなものです。
私の質問は、ビットフラグの(より)タイプセーフなセットに対して他にどのような解決策がありますか?
以下に独自のソリューションを投稿します。
database-design - 各データベースエンジンにバイナリフラグ/ブール値を格納するための最適な方法は何ですか?
私はいくつかの可能なアプローチを見てきました(いくつかのデータベースエンジンではそれらのいくつかは同義語です):
- TINYINT(1)
- BOOL
- BIT(1)
- ENUM(0,1)
- CHAR(0)NULL
PHPでサポートされているすべての主要なデータベースエンジンに注意する必要がありますが、参考として、他のエンジンにも注意してください。
読書に最適なデザインを求めています。たとえば、WHERE条件のフラグフィールドを使用したSELECTing、またはGROUPBYフラグ。パフォーマンスは、ストレージスペースよりもはるかに重要です(サイズがパフォーマンスに影響を与える場合を除く)。
そして、いくつかの詳細:
テーブルを作成している間、それがスパースになるかどうかはわかりません(ほとんどのフラグがオンかオフか)が、後でテーブルを変更することができるので、それを知っていれば最適化できるものがある場合は、了解しました。
また、行ごとにフラグが1つ(または少数)しかない場合と、フラグが多数(または多数)ある場合に違いが生じる場合は、注意が必要です。
ところで、私はSOのどこかで次のことを読みました:
booleanを使用すると、tinyintを使用するのと同じことができますが、意味的に意図を伝えるという利点があり、それは価値があります。
私の場合、各テーブルはアプリケーションのクラスによって表され、すべてがクラスで明示的に定義され、十分に文書化されているため、何の価値もありません。
vb6 - VB6のフラグは正しい値を返しません
私は現在、VB6/COMプロジェクトでビットフラグ列挙型を使用しようとしています。ただし、列挙型から値を読み取ろうとすると、一貫性のない結果が得られます。
列挙型の定義は次のとおりです。
Fruitsタイプのプロパティを公開するオブジェクトがあります
値を読み取ることができるはずのコードは、列挙型の各ビットの値に応じてラベルを表示/非表示にするために使用されます。
このコードが実行され、私が持っているbasket.AvailableFruits = 0場合、結果としてTrueを取得します。
何がこの振る舞いを引き起こす可能性があるかについての考えはありますか?
編集 :
私は列挙型のさまざまな値で試しました:
サイドノードとして、コードをデバッグするときに、式を監視式に入れると、正しい値が得られます。しかし、式が私のコードで評価されるとき、それはまだTrueを返します。
別のチェック構文を使用してみました:
まだTrueになるbasket.AvailableFruits = 0:-(
解決
さまざまなソリューションをテストした後、問題をCOMコンポーネントに絞り込むことができました。このコンポーネントの元のコーダーでは、値として0を返すのではなく、ポインターが0に設定されていたため、値を読み取ろうとしたときに問題が発生していました。
コードの可読性を向上させるための良いヒントと思われるヘルパー関数のために、FlipScriptの回答を選択しました。
c - これが最適な方法ですか?C ビットフィールド
DWORD の特定のビット数を設定またはクリアする関数を作成しました。私の機能は動作します。それを機能させるのに助けは必要ありません。ただし、選択した方法が最速の方法であるかどうか疑問に思っています。
これがどのように機能するかを説明するのはかなり難しいです。DWORD を含む 2 つの配列があり、DWORD の左側と右側のビット (すべてバイナリ 1) で埋められます。設定またはクリアしたいビットを除いてすべてのビットが埋められたマスクを作成し、そのマスクに基づいてビットごとの演算子でそれらを設定します。このような単純なタスクはかなり複雑に思えますが、私が思いつく最速の方法のようです。少しずつ設定するよりもはるかに高速です。
c++ - OpenGL シェーダー (glsl) の c++ ビット フラグ
それに対して if() できるようにするために、ビットフラグをフラグメントシェーダーに送信する最良の方法は何でしょうか?
次のビット フラグ (列挙型) があります。
テーブルに対応 [] = place i,j in table ([bit as int])
したがって、実際のテーブルのすべての行で最初のすべてのオプションが選択されている場合のビットフラグ (オプション) の可能な値は、273 の値になります。すべての行で、1 つのオプションのみを選択できます。
ビットフラグを使用して CPU で有効になっているオプションを確認したい場合は、次のようにします (最初の列が選択されている例の場合)。
アイデアは、ビットフラグで提示された選択に基づいて、シェーダーのさまざまな部分を実行することです。この目的のために、私は次のようなことをする必要があります:
無効になっている残りのオプションを (シェーダーで) スキップします。ただし、理想的なケースでは、ビットフラグを使用して、これを CPU で行う方法に単純化したいと考えています。したがって、私のシェーダーでは、次のようなものが必要です。
このようなことを達成することは可能ですか?まったく同じではないかもしれませんが、ビットフラグから生じるすべての可能な整数に対して単純に「 if()-ing 」するよりもエレガントですか? (例: if(1+16+256), if(1 + 16 + 512),... if(8+128+2048))
core-audio - AudioRenderCallback と AudioUnitRenderFlag によるポリフォニー
私はコア オーディオ/オーディオ ユニットについて理解を深めています。
5 つのボイスを許可する場合は、ミキサーに 5 つのバスが必要であり、5 つの異なるサウンドが必要な場合は、少なくとも 5 つのバッファーが必要です。時間を確認し、開始時間を使用して、メモをスケジュールする基本的な方法を見つけました。ioActionFlags を使用して無音をレンダリングしていることを示す必要があると思いますが、その方法がよくわかりません。
バスが 2 台あるので、一方がしばらく無音でもう一方が再生されると、ブーンという音がします。
c# - [Flags] 属性の実際の機能
申請[Flags]って実際どうなの?
の動作を変更することは知っていますがEnum.ToString、他に何かしますか? (例: 異なるコンパイラまたは実行時の動作など)
編集:ええ、列挙型がビットごとのフラグとして使用されることを意図しており、それをビットフラグに適用する方がより論理的であるという事実が文書化されていることは承知しています。ただし、一般的なプログラミングの実践ではなく、具体的な動作の変更についてもっと質問していました。
c# - (int 1,2,4,8、...)オプションがtrueまたはfalseかどうかを確認するためのパターンまたはメソッドがC#にありますか
メソッドにオプションを渡すために列挙型または整数を書くのが好きです。(int 1,2,4,8、...)オプションがtrueまたはfalseかどうかを確認するためのパターンまたはメソッドがC#にありますか。二変数関数で簡単にできるはずだと思います。
編集
このように作成できるオプションの数は制限されていますか?
c++ - ビットフィールド テンプレート (コードブック) の検索
コードブックには 8 ビットの値がたくさんあります (約 200 個)。
私のプログラムは、入力に応じて 8 ビット値を生成するので、同じビットが設定されているコードブック内の一致をすべて (または最初の値でさえも) 見つける必要があります。設定されていないビットは重要ではありません。
a) コードブックを保存し、b) コードブックを検索してすべての一致を見つけるための最適な方法を考えられますか? 私は標準的な線形検索を行っていますが、もちろんそれはかなり非効率的です。
どうもありがとう...
アケヴァン