問題タブ [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++ - フラグと状態をチェックする直感的な方法はありますか?
私のケースに関連する答えが見つからなかったので、私の状況を説明してみます:
私は次のコードを持っています:
私のコードはドキュメントの字句解析用であり、コメントブロックにない場合にのみアクションを実行しようとしています。コメントがない場合、上記のステートメントは正反対の結果を返します...
次のステートメントは正しく機能しますが、直感に反しているようです。
if (lexStatus & fInCommentBlock == fInCommentBlock)
したがって、質問は次のとおりです。
- なんで?なぜそれは私が期待しているものとは完全に反対に機能するのですか?
オペレーターの優先順位if ((lexStatus & fInCommentBlock) != fInCommentBlock)
により、問題が修正されます
- 私は正しい方法に近づいていますか?
- もっと良い方法はありますか?
- 各フラグに異なる値があることを確認する方法はありますか?
lexStatus & fInCommentBlock
コードのどこにも設定していなくても、一部のビットが設定されているため、最後の質問が追加されました...
よろしくお願いします!
php - PHP/MySQL フィールド/カラム ビットフラグ: UNIQUE_KEY_FLAG 対 UNIQUE_FLAG
PHPでは、MySQLの列/フィールドからビットフラグを抽出するときに、(他のSOの回答から)次のように表示されます:
これら2つのビットフラグの違いは何ですか?
そして、私が見つけたリストに NUM_FLAG と GROUP_FLAG = 32768 の両方が表示されるのはなぜですか?
また、php.net または mysql.com (Oracle) のフィールド/列ビットフラグの完全なリストに関して何も見つからないように見えるのはなぜだろうと思っています。SO回答のいくつかのリストには、「MULTIPLE_KEY_FLAG」であるビットフラグ#8が欠けているようです(これを示したSO回答が1つ見つかりました)。4096や8192など、他のいくつかのエントリも不足しているようです。これらのビットフラグの完全なリストを見つけることで、それぞれが何であるかについての説明的な答えが明らかになることを願っています... 私のインターネット検索能力は古くなってきているに違いないとしか思えません。
c# - コンマ区切りリストまたは整数からの列挙型フラグの解析
いくつかのフラグを含む XML があります。そのうちのいくつかは符号なし 32 ビット整数で、その他は符号なし 64 ビット整数です。それらの一部はコンマ区切りのリストで記述され、その他は 16 進形式で記述されています。
次の例を参照してください。
各列挙型を解析するメソッドを書きたくないので、ジェネリック メソッドを使用することにしました。しかし、Visual Studio ではソリューションをビルドできません。これが私の方法です:
私が得るエラーメッセージは次のとおりです。
エラー 1 演算子 '|=' は型 'T' および 'T' のオペランドには適用できません
これを行う方法はありますか?
php - これらのビットマスク定義をポーン言語からPHPに変換するための可能な方法は何ですか?
明確にするために、ポーンはC++に非常によく似た言語です。私は(phpで)ビットマスクのアクセス許可を必要とする管理コントロールパネルをプログラミングしていますが、アクセス許可を適切にPHPに変換したかどうかは実際にはわかりません(これは私が行ったことがないためです)。私はdefine()を使用して権限を定義しました。元々の状態は次のとおりです(ポーン):
これが私がPHPで定義した方法です。
私はビットフラグを比較しましたが、ほとんどの場合、ととともにEAdminFlags_All
許可を認識するだけです。したがって、PHPでこれをどのように定義したかにはおそらく問題があります。アクセス許可はデータベースに保存され、次のように生の整数値として保存されます。
次に、PHPにロードされ、次のように比較されます。EAdminFlags_None
EAdminFlags_BasicAdmin
51531777
よろしくお願いします。
c - Bitflag Invariant を効率的にチェックする (可能性のある bit-twiddle)
byte
ビットフラグを保存するために使用しています。相互に排他的な 2 つのフラグの 4 つのペアに分割できる 8 つのフラグ (各ビットに 1 つ) があります。ビットフラグを次のように配置しました。
フラグ B もセットされている間はフラグ A をセットすることはできません。その逆も成り立つため、フラグ A と B は相互に排他的です。フラグ A と B は両方とも設定を解除できますが、両方を設定することはできません。C 旗と D 旗、E 旗と F 旗、G 旗と H 旗についても同じ規則が適用されます。
現在のテスト ケース (C):
上記のcheck()
メソッドは現在、すべてのテスト ケースに合格しています。ビットいじりハックを使用して、この不変式が真であることを確認するより効率的な方法があるかどうかを知りたいです。この不変条件を 1 秒間に何度もチェックする必要がある場合があるため、効率が重要です。新しい配置が、元の配置ではできなかったちょっとしたハックを可能にする場合は、フラグの配置を変更したいと思います。
順列例: ABCDEFGH
-->AHBGCFDE
c - Determine which single bit in the byte is set
I have a byte
I'm using for bitflags. I know that one and only one bit in the byte
is set at any give time.
Ex: unsigned char b = 0x20; //(00100000) 6th most bit set
I currently use the following loop to determine which bit is set:
How do I most efficiently determine the position of the set bit? Can I do this without iteration?
optimization - バイト内で最も重要に設定されたビットの位置を決定する
byte
ビットフラグを格納するために使用しているものがあります。バイト内の最上位のセットビットの位置を計算する必要があります。
バイトの例: =>は最上位のセットビットの位置です00
1
01101
6
コンパクトヘクスマッピング:
Cのテストケース:
check()
ループ(またはできれば分岐)を含まないように関数を単純化したいと思います。バイト内の最上位セットビットの位置を計算するためのちょっとしたハックまたはハッシュルックアップテーブルソリューションはありますか?
c# - 常に0の値を含むビットフラグ
だから私はこのコードに出くわしました:
現在、技術的には「NA」は無効です。ユーザーがオプションを選択したくない場合は、オプションを選択せず、null許容整数に保存されます。「なし」オプションはありません。ただし、ユーザーがオプションACを選択すると、NAも常に追加されます。変更するNA = 1
とOptionC = 8
、すべてがうまく機能します。その部分は理にかなっています。しかし、どうしてNAが常にユーザーのオプションリストに含まれるのNA = 0
でしょうか。
編集:
いくつかのことを明確にするために、NAは排他的ですが、OptionBを選択する場所で、選択したオプションを表示すると、NAとOptionBを選択したことが表示されます。
c# - 複数の値が 1 つのラベルにマップされる列挙を定義するにはどうすればよいですか?
この例のために、レコード内の任意の 2 バイトが曜日を表すことを指定するファイルを解析しようとしているとします。
したがって、このフィールドにマップする列挙を定義できます。
しかし、どうすれば有効な値を定義できますReservedForFutureUse
か? 理想的には、次のようなことをしたいと思います:
この問題は、より複雑なフィールドでのみ悪化します。たとえば、この場合、7 と 8 の両方が同じエラー ケースまたは何かにマップされているとします。C#列挙でこの要件をどのように捉えることができますか?
c - 大量のフラグを持つビットフラグ変数の作成、または大きなビット幅の数値の作成方法
標準データ型のビット数よりも大きいビットフラグ オプションを持つ列挙型があるとします。
これはいくつかの理由で不可能です。列挙型の最大サイズは 128 ビットです (私のシステムの C/gcc では、実験から)、単一の変数も最大サイズが 128 ビットなどです。
C では、配列に対してビット単位の操作を実行することはできませんが、C++ では、ビット単位の演算子をオーバーロードして、ループでジョブを実行できると思います。
どのフラグがどこに行くのかを手動で覚える以外に、C に方法はありますか?