問題タブ [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++ - ビットフィールドとビットセット
ビットを配列(構造体など)に格納したい。だから私は次の2つのアプローチのいずれかに従うことができます
アプローチ番号1(AN 1)
アプローチ番号2(AN 2)
なぜ誰かがAN1よりもAN2を好むのでしょうか?
tsql - TSQLでintまたはbigintビットマスクフィールドの完全な32ビットまたは64ビットを読み書きする方法
32番目と64番目のビットの設定には注意が必要です。
32ビットソリューション:
32ビットフィールドで動作するようになりました。秘訣は、POWER関数の戻り値をintにキャストする前にbinary(4)にキャストすることです。最初にbinary(4)にキャストせずに、intに直接キャストしようとすると、32番目のビット(インデックス31)で操作するときに算術オーバーフロー例外が発生します。また、POWERに渡される式が、最大戻り値(2 ^ 31)を格納するのに十分な大きさの型(bigintなど)であることを確認する必要があります。そうしないと、POWER関数は算術オーバーフロー例外をスローします。
64ビットの問題:
64ビットフィールドにも同様のアプローチを使用するつもりでしたが、式/戻り値にdecimal(38)タイプを使用しているにもかかわらず、POWER関数が不正確な値を返していることがわかりました。例: "select POWER(CAST(2 as decimal(38))、64)"は、正しい値18446744073709551616ではなく、18446744073709552000(最初の16桁のみが正確)を返します。 63乗、その結果はまだ不正確です。
POWER関数のドキュメントには、「お金または数値データ型のいずれかが使用されている場合、floatへの内部変換によって精度が低下する可能性がある」と記載されています。(数値型は機能的に10進数型と同等であることに注意してください)。
64ビットフィールドを適切に処理する唯一の方法は、32ビットの半分を操作することだと思いますが、これには、@ bitindexプロパティを追加でチェックして、どちらの半分を操作する必要があるかを確認する必要があります。TSQLの32ビットおよび64ビットビットマスクフィールドにこれらの最終ビットを明示的に設定するための組み込み関数またはより良い方法はありますか?
c++ - ビットフィールドのメンバーを反復する
次の例があります。
ce{0-10}のようなメンバーに「自動的に」アクセスするにはどうすればよいですか?
c.e0 を読みたい場合は、次に c.e1 を読みたいとします...
構造体に 1000 個の要素がある場合、それほど多くのコードを記述する必要はないと思いますよね?
回避策、アイデアを手伝ってもらえますか?
この問題に何らかの形で関連する他の投稿を既に読んだと言いますが、解決策は見つかりませんでした。
どうもありがとうございました !
c - ビットフィールドを持つ構造体のサイズはどのように決定/測定されますか?
- の
int b:31
場合、出力は 8 です。 - の
int b:1
場合、出力は 4 です。 - の
int b:32
場合、出力は 12 です。
誰かがこの理由を説明できますか?
c++ - ビットフィールドを使用する価値があるのはいつですか?
C のビットフィールド実装を使用する価値はありますか? もしそうなら、それはいつ使われますか?
エミュレータ コードを調べたところ、ビット フィールドを使用してチップのレジスタが実装されていないようです。
これは、パフォーマンス上の理由 (またはその他の理由) で回避されるものですか?
ビットフィールドが使用されることはまだありますか? (つまり、実際のチップに搭載するファームウェアなど)
c - Cプログラムでunsignedintを宣言する方法
このリンクで私はhttp://lxr.linux.no/#linux+v2.6.36/include/linux/pci.h#L299
整数宣言
に出くわしました
unsigned int is_added:1;
私はCプログラムを作成し、それらの中で整数を宣言しましたが、上記で私は見ますの使用
:
それはどのような構文ですか?
c++ - ゼロ長ビットフィールドの実用化
Cについては完全にはわかりませんが、C++では長さが0の名前のないビットフィールドを使用できます。例えば:
- 質問1:これのどのような実用的な使用法を考えることができますか?
- 質問2:実際の実際の使用法(ある場合)を知っていますか?
氷犯罪の答えの後に例を編集しました
編集: OK、現在の回答のおかげで、理論的な目的がわかりました。しかし、質問は実際の使用に関するものなので、まだ保持されています:)
c - ビットフィールドのどちらの端が最上位ビットですか?
VisualStudio2008を使用してWindowsXP/ Vista /7用のC++アプリケーションを作成しています。例に示すように、一部の構造体はビットフィールドを使用しています。
フィールドのどちらの端が最上位ビットですか?
c - ビットフィールドからポインタにどのようにキャストしますか?
私は次のコードを作成しました。
警告:初期化により、キャストなしで整数からポインタが作成されます
またはA
警告:異なるサイズの整数からポインタにキャストします
gcc(GCC)4.1.1 20070105(Red Hat 4.1.1-52)から
警告が消えるにはどうすればよいですか?何をキャストしようとしても、いつも警告が出ているようです。
ありがとう、チェンツ