問題タブ [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.
c - 1,024 ビット (128 バイト) のビット フィールドを定義しようとしてエラーが発生しました
要素の非常に大きな構造のステータスをすばやく監視する目的で、大きなビットフィールドを定義したいと思います。これが私がこれまでに持っているものです:
これをコンパイルしようとすると、「エラー: ビットフィールド `<anonymous>' has invalid type」というエラー メッセージが表示されます。
ビットフィールドは特定の型でのみ使用できますか? 十分な大きさの変数を定義すれば、アプリケーションに必要な大規模なビットフィールドを定義できると考えました。ビットフィールドは、定義に使用される型より大きくてはならないからです。
ご意見やご提案をいただければ幸いです。
c++ - :1、:7、:16、:32 など、構造体宣言のコロンは何を意味しますか?
次の C++ コードはどういう意味ですか?
2 つの char a と b が作成されると思いますが、どちらも 1 バイトの長さである必要がありますが、「: 1」と「: 7」の部分が何をするのかわかりません。
c# - 複数の列挙値を返す最良の方法は何ですか? (Java および C#)
質問を参照しやすくするために削除された元のコンテンツの多く:
そのHouse
ため、メソッドを持つクラスがあり、House.buy(Person p)
その人に家を購入させます。Person が House を購入できるかどうかを知りたいのでHouse.tryBuy(Player p)
、Person が家を購入できるかどうかを返すメソッドもあります。、、、などのBuyState
値を持つ列挙型があります。満たすべきいくつかの異なる条件があり、クライアントはどれが失敗したかを知りたがっています。しかし、複数の条件が失敗した場合はどうなるでしょうか? House がすでに所有されていて、 Person が十分なお金を持っていない場合のように、階層を持つこともできます。しかし、これでクライアントに言えることは 1 つだけです。OK
NotEnoughMoney
AlreadyOwned
BuyStates.AlreadyOwned
N 個の個別の条件と N*N 値を持つ列挙型を使用できますがConditionA_AND_ConditionB_ANDConditionC
、いくつかの理由でまったく意味がありません。条件ごとにビットフィールドがあることは知っていますが、それらはあまりにも低レベルで、実装するのが面倒で、スケーラブルではないようです。したがって、列挙型から値のリストを返す方法が必要です。では、次のようなクラスはどうでしょうか。
これは可能な限り「最高の」設計ですか?
(回答を有効に保つために、Java AND C#に関するこの質問を維持してください)
c++ - ビットフィールドとしてのC ++ブール配列?
構造体に8つのブール値を格納する必要があるとしましょうが、それらに1バイトだけを一緒に使用したい場合は、次のようなことができます:
これで私は次のようなことができます
これは今のところ正しいですか?(実際にはわかりません。以前はビットフィールドを使用したことがありません)
わかりました-しかし、8ビットのみを使用するように8つのブール値の静的配列を作成することも可能ですが、それでもインデックスでそれらをアドレス指定できますか?
何かのようなもの
多分?(これで、エラーC2033が発生します)
助けてくれてありがとう!
c - ビットシフト、マスキング、またはビットフィールド構造?
私はビットを扱うのは初めてです。3つの異なるタイプのメッセージを送信できる既存のプロトコルを使用しようとしています。
タイプ1は16ビット構造です。
最初の2ビット(上記の私の構造ではタイプ)は常に10です。3番目のビットhighlowは、信号がオンかオフかを決定し、sig1+sig2が一緒になって信号の12ビットインデックスを定義します。このインデックスは、常にビット7にある0によって2バイトに分割されます。
タイプ2は32ビット構造です。2ビットタイプ、10ビットインデックス、16ビット値があり、27、23、15、7の位置に0が点在しています。ビットフィールド構造体表現は次のようになります。
sig1とsig2が一緒になって10ビットのインデックスを形成します。val1 + val2 + val3は一緒になって、10ビットインデックスで信号の16ビット値を形成します。
最初の2つの構造体の操作方法を理解すれば、3番目の構造体を理解できると思います。
私の質問は、単一の値を割り当てて、プログラムにval1、val2、およびval3に入る必要のあるビットを処理させる方法はありますか?
ビットシフト、ビットフィールド構造体、および0によるパディングについて読みました。構造体は進むべき道のように見えますが、それを実装する方法がわかりません。私が見たビットパッキングの例のどれも、これらのように分割された値を持っていません。最終的には、アナログ構造体を作成し、インデックス(i = 252)と値(v = 32768)を割り当てて、それを実行できるようにしたいと思います。
誰かが適切な方法を提案したり、同様のサンプルへのリンクを提供したりできれば、私はそれを大いに感謝します。重要な場合、このコードはより大きなObjective-Cアプリに組み込まれます。
ありがとう。
ブラッド
c++ - ビットフィールドの読み取りを32ビットに強制します
PCIバスを介してVMEブリッジチップ(Tundra Universe II)への32ビット未満の読み取りを実行しようとしています。VMEブリッジチップはVMEバスに接続され、ターゲットによってピックアップされます。
ターゲットVMEアプリケーションはD32(32ビットのデータ幅読み取り)のみを受け入れ、それ以外は無視します。
VMEウィンドウにマップされたビットフィールド構造を使用する場合(メインメモリにnmapされます)、24ビットを超えるビットフィールドを読み取ることができますが、それ以下のものは失敗します。すなわち:-
これは、構造体が32ビットとして読み取られることを示していますが、たとえばreg-> fail.aの構造体を介した読み取りが失敗すると、Xビットの読み取りに因数分解されます。(Xは16または8の場合がありますか?)
したがって、質問は次のとおり
です。a)これはどこで縮小されますか?コンパイラ?OS?またはツンドラチップ?
b)実行された読み取り操作の実際のサイズはどれくらいですか?
私は基本的にチップ以外のすべてを除外したいと思います。そのドキュメントはWeb上にありますが、PCIバスを介して要求されたデータ幅が32ビットであることが証明できる場合、問題はTundraチップのせいにすることができます。
編集:-
具体的な例、コードは次のとおりです:-
だから今私はこれに変更しました:-
そして、基本の主な構造体:-
だから私はまだすべてのベースラインコードを変更する必要があります
また、元のコードのように、2回目の読み取りで実際に実際の読み取りが再度行われないかどうかをどのように知ることができますか?(ユニオンを介してすでに読み取られたビットを使用する代わりに!)
c - バイト アドレス指定可能配列から n ビット要素を解析するにはどうすればよいですか
8 ビット バイトでのみアドレス指定可能なデータ ストリームがあり、それを 6 ビット要素に解析し、それを配列に格納したいと考えています。これを行うための最もよく知られている方法はありますか?
の中へ
のような配列
(パディングをゼロにすることができます。この方法でアドレス指定できる必要があります)
データは8ビット配列であり、これも6ビットの倍数であり、実際には無限ではありません
python - 和集合と交点を計算するこのプログラミング手法の正式名称
2 つのセット (リストとして格納されている) の和集合と交差と差分を同時に計算したいときに、この [ホイール] を [確実に再] 発明しました。初期コード (厳密ではない):
次に、-1、1、0、... の代わりに 00、01、10、および 11 を使用する必要があることに気付きました。したがって、位置 n のビットは、セット n のメンバーであることを示します。
これは、32 ビットの int を使用して最大 32 セットに一般化するか、bitarray または文字列を使用して任意の数のセットに一般化できます。したがって、このディクショナリを 1 回事前計算してから、非常に高速な O(n) クエリを使用して対象の要素を抽出します。たとえば、すべて 1 はすべてのセットの交差を意味します。すべての 0 は特殊なものであり、発生しません。
とにかく、これは自分の角を鳴らすためではありません。これは確かに以前に発明されたもので、名前があります。それはなんと呼ばれていますか?このアプローチはどこかのデータベースで使用されていますか?
c++ - ビット フィールド パラメータの解析、unsigned long のビットを「破棄」する方法は?
まず第一に、これが可能かどうかを知りたいです: 数に含まれている場合と含まれていない場合がある、いくつかの未署名のショートを含む unsigned long があるとしましょう。例えば:
他の 2 つのフィールドを 0 と見なすことはできますか? また、OR はこれに適した操作ですか? その後、引数として bitfld を渡すとしましょう:
ビットフィールドの最初の16ビットをポーリングしてチェックし、再帰的にポーリングして検証し、0より大きい場合は保存する必要があると思います。しかし、これを行う方法がわかりません。ビットシフトのみのシフト左または右、したがって、除算または乗算のみですよね?
ぶつけてごめんなさい。ご回答いただきありがとうございますが、最終的にはよりシンプルで効率的な方法である内部構造を使用することになりました。おわかりのように、これは文字列を使って簡単に行うことができましたが、私の目的はコードのユーザーへの透明性、つまり簡単にプログラムできるようにすることでした。値を保持する内部構造を作成し、そのような構造を作成して返す public メソッドを作成したので、使いやすく、解析が高速です (ただし、スタックに (小さいとはいえ) 構造を割り当てるオーバーヘッドがあります。ビット フィールド ソリューションにはありませんが、悲しいかな)。
それでは皆様、ご回答ありがとうございます。
c - C ビットフィールドに関する質問
ビットフィールドは C の概念ですか、それとも C++ ですか?
構造内でのみ使用できますか? それらを使用できる他の場所は何ですか?
私の知る限り、ビットフィールドは、指定された数だけメモリを占有する特別な構造変数です。ビットの。メモリを節約するのに役立ちますが、他には何もありません。私は正しいですか?
ビットフィールドの使用法を理解するために小さなプログラムをコーディングしましたが、期待どおりに動作していないと思います。以下の構造体のサイズは 1+4+2 = 7 バイトであると予想しています (私のマシンでは unsigned int のサイズが 4 バイトであることを考慮すると)、しかし驚いたことに、12 バイトであることが判明しました (4+4+4 )。誰でも理由を教えてもらえますか?
出力: