問題タブ [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.
sql - 多くのビットを格納する -- 複数の列を使用するか、単一のビットフィールド列を使用する必要がありますか?
User
データベースでテーブルを設計しています。「許可」または「不許可」のいずれかを指定できるオプションは、ユーザーごとに約 30 ほどあります。
私の質問は、これらを 30bit
列として保存する必要があるか、それとも単一のint
列を使用してそれらを保存し、アプリケーションの各ビットを解析する必要があるかということです。
また、データベースは SQL Server 2008 および 2005 です (環境によって異なります)。
c++ - Bitfields in C++
I have the following code for self learning:
I know that unsigned int k:4
means that k is 4 bits wide, or a maximum value of 15, and the result is the following.
For example, filed1
can be from 0 to 7 (included), field2
and k
from 0 to 15. Why such a result? Maybe it should be all zero?
c - ビットフィールドを自動変数として宣言できないのはなぜですか?
コロンを使用して指定されたサイズのビットフィールドを宣言したい (構文が何と呼ばれるか思い出せない)。私はこれを書きたい:
しかし、GCC は構文エラーだと言っています (ネストされた関数を記述しようとしていると思われます)。私はこれをしても問題ありません:
そして、そのような構造体を 1 つスタックに置く
これは、セマンティックの問題ではなく、構文によって妨げられていると私に信じさせます。
では、なぜ最初の例がうまくいかないのでしょうか? 私は何が欠けていますか?
mysql - MySQLでは、BIT列は5、6、または7バイトの整数を格納するのに適した方法ですか?
サイズを抑えたいテーブルがあり、列の1つを5バイトの符号なし整数として扱うことができます。これは私が検索する必要のない列です。
MySQLは整数データ型を提供します
TINYINT
、1バイト整数の場合SMALLINT
、2バイト整数の場合MEDIUMINT
、3バイト整数の場合INT
、4バイト整数の場合BIGINT
、8バイト整数の場合。
ただし、1≤M≤64の場合も提供BIT(M)
されます。これにより、0から2 M-1までの符号なし整数が(事実上)格納されます。BIT(40)
5バイト整数を格納するために列を使用することを避ける理由はありますか?(前述したように、この列で検索する必要はありません。したがって、クエリの実行速度に関連する問題は無視できます。)
c++ - C ++コンストラクタでビットフィールドを初期化する方法は?
まず、移植性には関心がなく、エンディアンは変わらないと安全に推測できます。ハードウェアレジスタ値を読み取ると仮定して、ビットマスクを使用せずにレジスタ内の個々のフィールドを参照できるように、そのレジスタ値をビットフィールドにオーバーレイしたいと思います。
編集: GManによって指摘された問題を修正し、将来の読者にとってより明確になるようにコードを調整しました。
参照:より雄弁な解決策については、以下のAndersK.とMichaelJの回答を参照してください。
c - 冗長な__packed__属性
このコードは、Microchip社のPIC32MXマイクロプロセッサ用です。彼らのコンパイラは本質的にGCC3.4です。
私はGCCの__packed__
属性を使用してビットフィールドをユニオンにパックし、後でunsigned char
SPIまたはI2Cを介して送信するための(つまり、型のパンニング)としてそれらを取得する傾向があります。この動作はすべて私の実装によって定義されており、完全に機能します。私はこれを100行ほどのマスキングとシフトよりも好みます:)
私の質問は:__packed__
以下のコードに冗長な属性がありますか?一見、トップレベルの組合員は免除できると思いますが、よくわかりません。または、ネストされた構造体でそれらを除外できますか?
c++ - 私の値がビット フィールドで 2 で除算される理由
ビットフィールドとエンディアンで問題が発生しました...混乱しました。
ネットワークから取得したデータを解析する必要があります。送信されたデータはリル エンディアンです (boost::asio を使用しています)。
これについて説明してもらえますか
[出力]
00000000 00000001
00000010 00000000
c++ - ゲームマップオブジェクト属性のビットフィールドとポリモーフィズム
この最適化の質問は、最後の日私を悩ませてきました。
私のプログラム(単純なローグライクゲーム)では、ビット単位のフラグを使用して、マップオブジェクトの属性を格納します。たとえば、それらがソリッドであるか、レンダリングされているかなどです。ただし、ポリモーフィズムを使用して適切な値を返すことはできました。
私の質問は、リンクリストループで使用した場合、他の方法よりも大幅に速いか遅いかということです。また、一方が他方よりも優れた実践ですか?
コードの例:
ありがとう。
c++ - 構造体とポインタに関する質問
次のコードを考えてみましょう
このフラグメント
私は、たとえばこの場所の後に、このコードのいくつかの興味深い特徴を推測した後に追加しました
8を出力する書き込みprintf("%d\n",bitfields->x);
を行うと、ポインタと参照を使用してiの値がxに付与されることを理解しているため、たとえば8を出力すると、bitfiled->y
0が書き込まれるため、2番目の要素変数jを導入してbfstructerの新しいインスタンスを作成します。 jを参照してから、ステートメントbit-> yは9を書き込む必要があります。これは、私が理解しているように、順序定義ですが、なぜ0になるのでしょうか。このコードがどのように機能するか説明してください。私は英語を話せませんので、英語が下手でごめんなさい
c++ - ビットフィールドをパックするとき、VC++ は何をしていますか?
私の質問を明確にするために、サンプルプログラムから始めましょう:
出力は「8」です。これは、パックしたい 56 ビット (7 バイト) が 8 バイトにパックされていることを意味し、1 バイトを無駄にしているように見えます。コンパイラがこれらのビットをどのようにメモリに配置していたのか知りたくて、特定の値を に書き込んでみました&c
。
int main(int argc, char **argv)
予想どおり、Visual Studio 2010 を使用する x86_64 では、次のことが起こります。
等
移植性についてはしばらく忘れて、1 つの CPU、1 つのコンパイラ、および 1 つのランタイム環境に関心があると仮定してください。VC++ がこの構造を 7 バイトにパックできないのはなぜですか? それは言葉の長さですか?MSDNのドキュメントに#pragma pack
は、「メンバーの配置は、n の倍数 [私の場合は 1] またはメンバーのサイズの倍数のいずれか小さい方の境界上にある」と記載されています。7 ではなく 8 のサイズを取得する理由を誰か教えてもらえますか?