問題タブ [bit-fields]

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.

0 投票する
8 に答える
32839 参照

c# - フラグでのビット演算子の使用

私は4つの旗を持っています

過去と未来の2つのフラグを受け取ったとします(setFlags(PAST | FUTURE))。中にあるかどうかはどうすればわかりPastますか?同様に、それが含まれていないことをどのように知ることCurrentができますか?そうすれば、考えられるすべての組み合わせをテストする必要はありません。

0 投票する
3 に答える
2980 参照

c - Cでビットフィールドを使用する正しい方法は何ですか?

ビットフィールドを使用して、FPU のないマイクロコントローラー用に作成しようとしている float ライブラリに簡単にアクセスしています。

問題は、ビットフィールドで動作させることができないように見えることです。見てみましょう:

問題は、何かにアクセスまたは変更しようとすると、ビットフィールドがそれぞれ最後から 1,8,23 ビットと見なされることです。最後から23ビットのはずですが、8ビット、そして最後のビットです。ビットフィールドの使用を完全に誤解していない限り。パックを使用すると問題が解決すると思っていましたが、ご覧のとおりそうではありませんでした。

どんな助けでも本当にありがたいです。グーグルで何度もこのサイトにたどり着いたので、大きな期待を寄せています。

0 投票する
7 に答える
13242 参照

c++ - C++でビットフィールド構造体を初期化する最良の方法は何ですか?

C++ には、匿名のビットフィールド構造体を含むクラスがあります。すべてのフィールドを手動で書き出すことなく、ゼロに初期化したいと考えています。

初期化を 3 つの場所に配置することを想像できます。

  1. ビットフィールドにコンストラクターを作成する
  2. 含まれているクラスのコンストラクターの初期化子リストをゼロにします
  3. 含まれているクラスのコンストラクターの本体でゼロを設定します

このビットフィールドには多くのフィールドがありますが、すべてをリストするのは避けたいと思います。

たとえば、次のコードを参照してください。

これらのいずれかが望ましいですか?それとも、私が見逃しているものがありますか?

編集:以下の受け入れられた回答(Ferruccioによる)に基づいて、私はこの解決策に落ち着きました:

0 投票する
3 に答える
1910 参照

c++ - 同じデータ型のビットフィールドのサイズが、混合データ型のビットフィールドと比較して小さい理由

同じデータ型のビットフィールドが混合データ型の場合よりもサイズが小さい理由を知りたいです。

sizeof(xyz)= 4 sizeof(abc)=12。

VS 2005、64ビットx86マシンを使用しています。

少しのマシン/コンパイラレベルの答えは素晴らしいでしょう。

0 投票する
21 に答える
40106 参照

c++ - -1を使用してすべてのビットをtrueに設定しても安全ですか?

このパターンがCおよびC++で多く使用されているのを見てきました。

これは、これを達成するための優れたポータブルな方法ですか?それとも使用しています0xffffffff~0

0 投票する
5 に答える
3617 参照

c - C で大きな構造体からサブ構造体を取得する

私はstruct既存のプログラムに非常に大きな影響を与えています。この構造体には、多数のビットフィールドが含まれています。

その一部 (たとえば、150 フィールドのうち 10 フィールド) を保存したいと考えています。

サブクラスを保存するために使用するサンプル コードは次のとおりです。

また、時々変更したいので、どの部分を選択するのが面倒でないかを願っています. 前に紹介した素朴なアプローチは非常に壊れやすく、維持できません。smallstruct20 の異なるフィールドにスケールアップする場合、 と関数の両方でフィールドを変更する必要がありsubstructます。

私は2つのより良いアプローチを考えました。残念ながら、どちらも外部のCILのようなツールを使用して構造体を解析する必要があります。

最初のアプローチは、substruct関数を自動的に生成することです。の構造体を設定し、それを解析して のフィールドに従って関数smallstructを生成するプログラムを作成します。substructsmallstruct

2 番目のアプローチは、(C パーサーを使用して) に関するメタ情報bigstructを作成し、構造体の特定のフィールドにアクセスできるようにするライブラリを作成することです。これは、Java のクラス リフレクションのアドホックな実装のようなものです。

たとえば、struct-alignment がないと仮定すると、struct に対して

次のメタ情報を生成します。

この関数でithフィールドを取得します。

どちらの方法も余分な作業が必要ですが、パーサーがメイクファイルに含まれていれば、サブ構造体の変更は簡単です。

ただし、外部依存関係なしでそれを行いたいと思います。

誰もがより良いアイデアを持っていますか? 私のアイデアが良いところで、インターネット上で私のアイデアの利用可能な実装はありますか?

0 投票する
9 に答える
1608 参照

c - ビット フィールド: セット vs テスト アンド セット (パフォーマンスのため)

次のような C 構造体のインスタンスが多数あります。

  • flag最初は 0 ですが、特定の関数の終了時には 1 でなければなりません。

最も簡単な実装は次のとおりです。

しかし、代わりにこれを行うと、パフォーマンスにどのような影響が生じる可能性がありますか:

メインメモリへの書き込みを避けたいと思っています。最初のバージョンは常に書き込みを行い、2 番目のバージョンはフラグがまだ設定されていない場合にのみ書き込みを実行しますが、ほとんどの場合、フラグは既に設定されています。

パフォーマンスに影響を与える可能性が高いその他の要因 (分岐予測など) は?

これまでのところ、わずかな速度の向上を見てきましたが、データ セットが大きくなるにつれて、さらに重要になることを願っています。

この変更により、大規模なデータセットでプログラムが遅くなるリスクはありますか? もしそうなら、どのような状況でこれが起こる可能性がありますか?

0 投票する
6 に答える
2170 参照

c++ - エイリアシング付きの可変サイズのビットフィールド

サイズが異なる可能性があるビットフィールドを含む構造体がいくつかあります。例:

一度にすべてのビットにアクセスする共用体:

問題は次のとおりです。一部のビットフィールド基本クラスでは、uint8_t では不十分です。BitfieldSmall は uint8_t に適合しますが、BitfieldLarge は適合しません。データは可能な限り密にパックする必要があるため (後で SSE 命令によって処理されます)、常に uint16_t を使用することは問題外です。サイズがビットフィールドと同じ整数型で「all」フィールドを宣言する方法はありますか? または、ビット全体にアクセスする別の方法はありますか?

もちろん、テンプレートの使用を控えて、あらゆる種類のビットフィールドを明示的に宣言することもできますが、コードの繰り返しは避けたいと思います (演算子とメンバー関数のかなりのリストがあります)。

0 投票する
5 に答える
2175 参照

c - C のビットフィールド マスク

コンパイル時にビットフィールドのマスクを見つけるための C での移植可能な方法はありますか?

理想的には、次のようなフィールドをアトミ​​ックにクリアできるようにしたいと考えています。

それ以外の場合は、構造体のロックを解除する必要があります。これは、私が望むよりも重いものです。

0 投票する
4 に答える
515 参照

c - 構造体のビット フィールドを削除する

質問があります。構造体でビット フィールドを使用するレガシー アプリケーションがあります。このようなもの

そのため、値は31 しかthree持てません。MAX

MAXここで、 の値を増やす必要がありますthree。ビットフィールドを削除する予定です。これで、より多くのメモリを処理できるようになります。この他に、何か気をつけることはありますか?それは他の害を引き起こしますか?