問題タブ [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++ - C/C++ ビットフィールドとビットごとの演算子を比較して、ビットを選択します。どちらが高速で、優れており、移植性が高いですか?
この方法で、いくつかのビットを 1 バイトにパックする必要があります。
また:
ソース コードの明快さから、ビットフィールドの方がすっきりしていることは明らかです。しかし、どちらのオプションがより高速ですか? 速度差はあっても大差ないのはわかっていますが、どれも使えるので速い方がいいです。
一方、ビットフィールドがプラットフォーム間で同じ順序でビットを配置することが保証されていないことを読んだので、コードを移植できるようにしたいと考えています。
注: 「プロフィール」に回答する予定がある場合は、そうしますが、私は怠け者なので、誰かがすでに回答を持っている場合は、はるかに優れています。
コードが間違っている可能性があります。必要に応じて修正できますが、この質問の要点を覚えておいて、回答してみてください。
c# - C#で、列挙型フラグをあるタイプから別のタイプに簡単にマップするにはどうすればよいですか?
質問の最後にある更新も参照してください...
次の状況を考えると:
big switch()のような名前を使用したマッピング関数に基づいて、ある列挙型を別の列挙型に、またはその逆に変換したいのですが、これはフラグ列挙型であるため、このようなルーチンを汎用として設計するのに苦労しています。
基本的に、私が欲しいのは次のようなものです。
例1
例2
例3
例4
例5
Map()関数は、実際のマッピングを提供するためのデリゲートを受け入れることができますが、そのようなデリゲートをビットで支援するためのいくつかの関数が必要です...
編集:説明
列挙型定義の値は互いに適合しているように見えるかもしれませんが、必ずしもそうであるとは限りません。
たとえば、次のようになります。
編集:詳細
名前のパターンに基づくのではなく、列挙型フラグのカスタムマッピングを行う方法を検討しています。ただし、名前はカスタムマッピング関数で使用されます。
たとえば、SAをDCにマップしようとするSourceToDestMapper関数を使用することは完全に可能です...
主な問題は、SourceToDestMapper関数にソースの各フラグをフィードし、複数のビットセットを持つフラグ値を処理することです。
例:フラグSourceEnum.SABCがあると、SourceToDestMapper関数が3回呼び出され、次のようになります。
- DestEnum.DAにマップされたSourceEnum.SA
- DestEnum.DBにマップされたSourceEnum.SB
- DestEnum.DCにマップされたSourceEnum.SC
そして、結果のDestEnumは次のようになります。DestEnum.DB | DestEnum.DC
c# - 含まれる値のディクショナリを返すビットフィールド列挙型拡張メソッド
列挙型は確かに混乱する可能性があります。列挙型に値を取り、一致するすべてのビットの名前を返す拡張メソッドを作成しようとしています。
与えられた:
選択した値のみのディクショナリを返す拡張メソッドを作成したいと思います。したがって、次の場合:
火星と金星がコンソールに書き込まれることを期待しますが、代わりにPlanetEnumのすべての値が表示されます。これが私の拡張メソッドコードです:
誰かが私が間違っていることを見ていますか?列挙型のすべてのフィールドを返すことを知っていEnum.GetValues
ますが、列挙型インスタンスのフィールドのみを返すようにするにはどうすればよいですか?
助けてくれてありがとう、
キース
c - int 以外のタイプのビットフィールド?
次のように宣言されたビットフィールドを使用するコードがあります
uint8_t
に typedef されunsigned char
ます。
このビット フィールドを使用して MS-VS 2008 でコードをビルドすると、次のような警告が表示されます。
- int 以外のタイプのビット フィールドを使用する際に問題や潜在的な問題はありますか? なぜ警告?
- C99 の C 言語仕様で許可されている int 型のビット ファイル以外はありますか?
c - ビット フィールドを int に変換する
私はこのように宣言されたビットフィールドを持っています:
私はint配列も持っており、このビットフィールドの実際の値を表すこの配列からint値を取得したいと考えています(実際には、その一部を持っているある種のマシンワードであり、int表現が必要です単語全体)。
c - C でレジスタ ビットフィールドを再定義する際のヒント
使用しているチップで使用できるように、いくつかのレジスタ ビットフィールドを再定義するクリーンな方法を考え出すのに苦労しています。
たとえば、これは CAN 構成レジスタの 1 つが次のように定義されているものです。
次のように BRP と SJW を割り当てる必要があるため、これらの定義はどちらもそれほど役に立ちません。
ここに私が行った2つの試みがあります:
試み #1:
試み #2:
私がやろうとしていることを達成するための「よりクリーンな」方法はありますか? また、Attempt #2 のキャスティングに近い揮発性について少しイライラしています。変数が近いことを指定する必要がありますか?
c++ - C++ のビット フィールドの速度が遅い
手動で制御されたビットフィールドを持つ多くの構造体を含む C++ アプリケーションがあります。
明らかな理由から、これを次のようなビット フィールドを使用するように変更したいと思います。
この切り替えに関して私が懸念しているのは、このサイトで、C++ のビット フィールドがいかに遅いかを述べている多くの参考文献に出くわしたことです。私の推測では、上記の手動コードよりもまだ高速ですが、さまざまなプラットフォーム、特に 32 ビットおよび 64 ビット ウィンドウでビット フィールドを使用することによる速度への影響をカバーするハード リファレンス資料はありますか。アプリケーションはメモリ内の膨大な量のデータを処理し、高速でメモリ効率が高い必要があります。これが、最初にこのように記述された理由である可能性があります。
c++ - 構造体ビットフィールドの最大サイズ (C99、C++)
ビット構造体フィールドの最大ビット幅は?
ビットフィールドのサイズが最大 128 ビット、または 256 ビット、またはそれ以上で、構造体内にビットフィールドを定義できますか? sse2 (128 ビット)、avx1/avx2 (256 ビット)、avx-512 (次の Xeon Phis では 512 ビット) レジスタなど、いくつかの幅の広いベクトル タイプがあります。また、gccの__int128などの拡張機能もあります。
c++ - ビットフィールドを取得してビットを正しい順序に並べるにはどうすればよいですか?
まず、問題のアプリケーションは常に同じプロセッサ上にあり、コンパイラは常に gcc であるため、ビットフィールドが移植可能でないことは心配していません。
gcc は、最初にリストされたフィールドがバイトの最下位ビットに対応するようにビットフィールドをレイアウトします。したがって、a =0、b =1、c =1、d =1 の次の構造では、値e0のバイトが得られます。
(実はこれは C++ なので、g++ のことを言っています。)
ここで、 aを 6 ビット整数にしたいとします。
これで、なぜこれが機能しないのかがわかりますが、次の構造をコーディングしました。
b、c、およびdを 1 に設定し、 aを 0 に設定すると、次の 2 バイトになります。
これは私が欲しかったものではありません。私はこれを見たいと思っていました:
最初のバイトの最上位ビットに 3 ビット、最初のバイトの最下位 5 ビットと 2 番目の最上位ビットにまたがる 6 ビットを持つ構造を指定する方法はありますか?
これらのビットがどこに配置されるかは、私には制御できないことに注意してください。これは、他の誰かのインターフェイスによって定義されたビットのレイアウトです。
c - Cのビットフィールド?
こんにちは、みんな、
構造体または共用体のメンバーではないビットフィールドを指定して変数を宣言できる方法はありますか? .
ありがとうマディ