問題タブ [bit-packing]

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 投票する
2 に答える
148 参照

c++ - 構造体の配列要素のビット サイズの指定

今、私は次のような構造体を持っています:

すべてのvalsa 単一配列を作成する方法はありますか? 要点は、使用されるスペースではなく、すべての値の場所です。パディングなしでメモリ内に配置し、それぞれが 2 ビットを占有する必要があります。配列を持つことは重要ではありません。インデックスによる単純なアクセスを持つ他のデータ構造は問題ありません。プレーンな C か C++ かは関係ありません。読み取り/書き込みのパフォーマンスは重要です。これは、現在インデックス アクセスに使用されている単純なビット操作と同じ (似ている) 必要があります。

アップデート:

私が正確に欲しいものは次のように説明できます

0 投票する
2 に答える
111 参照

integer - Fortran の小さな整数

1 と -1 のみを含む整数の大きな配列を fortran で作成する必要があります。最小限のメモリスペースしか必要としないような配列を定義する方法を教えてください。

ありがとうございました

0 投票する
2 に答える
228 参照

c# - C# - 梱包日、月、年

Programming in the Key of C# で、著者は、日付 (年、月、日 -- 数値) を 32 ビット整数にパックする方法の例 (ソース コード付き) を示しています。この例では、作成者は次のように情報をパックします。

これを正しく理解していれば、9 の左シフトはちょうど 512 (またはすべてのビット位置をカウントする場合は 1023) の値を与えます。しかし、プログラムを実行すると、2014 (年) のような値が保存されることに気付きました。このような小さな値でこれがどのように可能になるのでしょうか? このコードの一部を誤解していますか? コードを読んだり、見たり、いじったりしても、空気をきれいにするのに役立ちませんでした。

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

c++ - 文字を 5 ビットにパックし、結果をファイルに書き込む (C++)

文字を含むベクトルがあります。これらの文字はアルファベットの大文字 26 文字のみであるため、これらの文字を表すビット数を 8 から 5 に減らすことができます。次に、後で使用するために結果をファイルに書き込む必要があります。

私の現在の考えでは、A..Z の最上位 3 ビットはすべて同じなので、最下位 5 ビットを使用して文字を一意に識別できますか? ただし、このフォーマットされていないデータをファイルに書き込むのに苦労しています。

これを実行して結果をファイルに書き込むにはどうすればよいですか?

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

c++ - 構造体のビット パッキングと LSB/MSB のあいまいさ C++

次のパケット ヘッダーの C++ コードを作成する必要がありました。

元画像リンク、上記JPEGのPNG版。

上記のパケット形式用に私が書いた構造体コードを次に示します。uint8_t または uint16_t ビット フィールドが正しいかどうかを知りたい

LSB -> MSB が struct に確実に保持されるようにするにはどうすればよいですか?

私は混乱し続け、読んでみましたが、さらに混乱してしまいました。

PS: 私は 32 ビット プロセッサを使用しています。

0 投票する
1 に答える
939 参照

compression - GLSL - 複数の 0-1 色 (var4) を単一の var4 変数に圧縮/パックする

私はGLSL 2 esで次のことをしようとしています:

多数 (たとえば 4) の正規化されたvar4変数 (RGBA) が与えられると、それらのビット深度が減少し、結果が単一の 0-1 クランプされた にパックされvar4ます。これは 8 ビット (チャンネルごと) のテクスチャとして保存され、後でアンパックされます。これにより品質が低下することは承知していますが、許容範囲です。

したがって、この例では:

RGBA 8 ビット
->が RGBA 2 ビットに縮小され
->、他の 3 つの RGBA 2 ビットがパックさvar4s
->れ、単一の 8 ビット RGBA テクスチャとして保存さ
->れ、4 x RGBA 2 ビット変数にアンパックされ
->、元の品質が低下したバージョンに縮小されました。

私は GLSL でビットシフトを行うことができないことに気付いたので、乗算のコレクションを実行する必要がありましたが、その魔法の組み合わせは今のところ私を逃れています! フロートを詰め込むことについて他の人が話しましvec4sたが、私の問題は少し異なります。

ありがとう!

0 投票する
1 に答える
46 参照

math - 2 の累乗/テーブルの設計上の問題の集計と集計解除

私はいくつかのデータを持っており、仕事の事務処理に関するさまざまな問題を追跡しようとしています。データは次のようになります。

事務処理の N カテゴリ、および M の異なる ID または行、および各フィールドでの X の異なる応答について、どの ID に対するどの応答と、どのカテゴリの事務処理がどこにあるかを判断しようとしています。

私は 2 つの異なるテーブルのデザインを考えました。

2 カラム設計:

対応するコードベースで

そのため、事務処理の列にある番号を見るだけで、その期間のさまざまな事務処理の問題が何であるかがわかります。2 列の設計では、エラーは次のようになります。

2 カラム設計:

この設計の問題点は次のとおりです。1) 書類の列に数字を入力するのは簡単です。誰かがその期間のすべての書類に目を通し、各部分のさまざまな問題や問題の欠如に注意する必要があります。事務処理。それらの問題が見つかると、各問題に番号が割り当てられ、それらの番号が合計されて、その特定の期間のすべての問題をカプセル化した全体の番号が求められます。ただし、これらの特定の数値からテキスト出力を作成する方法がわかりません。可能性のあるすべてのテキスト出力のリストをブルートフォースしたくありません。署名が欠けている完成した書類を手に入れることはできないので、いくらか絞り込むことができますが、それはあまりにも多くの可能性のように聞こえます 私の質問は次のとおりです。257 という数字を取得した場合、257 が実際には 256+1 であるとどのように判断できますか? 必要がありますか、それともこれを不必要に複雑にしていますか?

または、私が考えた別の方法は、すべてのエラーをよりバイナリの変数に含めることでした。したがって、上記のエラー コードではなく、次のようになります。

多くの列

したがって、テーブルは次のようになります。

そして、事務処理に関するさまざまな問題についてレポートを実行しようとしているときに、事務処理 1 列にある番号 2 のインスタンスの数をカウントするルックアップ関数を用意し、対応する ID を見つけるだけです。それ。次に、この情報を同僚と上司に提供すると、彼らは、この人物の書類に問題があることを知ることになります。しかし、彼らは問題が何であるかを具体的に知らないため、本自体の直接の知識に頼る必要があります。

この設計の問題点は、帳簿を管理している私の同僚に確認して、事務処理の問題が何であるかを確認することを人々に暗黙のうちに要求することであり、演習への私の関与の全体的なポイントは、彼女の仕事を助けることです。そして、コンピューターの力を使って彼女の仕事を手伝うこと。したがって、2 番目の設計では、タスクを支援するためにコンピュータ テクノロジの可能性を最大限に活用していないように見えます。

したがって、前に提起された質問を超えて、この問題に関する質問、ポイント、または方向性を完全に歓迎します. 別のテーブル デザインがあれば、それも歓迎します。

この投稿が直接的ではないというスタックオーバーフローのポリシーに違反している場合は、事前にお詫び申し上げます。できる限り直接的なものにしようとしました。

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

c - 構造体のワードサイズの変数をワード境界に揃える C コンパイラをオーバーライドする方法

次のように指定された構造があります

  • メンバー 1、16 ビット
  • メンバー 2、32 ビット
  • メンバー 3、32 ビット

ファイルから読み取るものです。ファイルから構造体に直接読み込みたい。

問題は、次の構造体宣言のために ARM Cortex M3 で作業しているため、C コンパイラが変数 m1、m2、および m3 を 32 ビットのワード境界に揃えることです。

ファイルから直接読み取ると、m2 と m3 に間違った値が入力され、余分な 2 バイトも読み取られます。

私はハッキングして、現在問題なく動作する次のものを使用しています:

ただし、これは非常に汚いハックのように見えます。コンパイラに m2 と m3 の半分を別の単語に強制するよりクリーンな方法を望みますが、最適ではないかもしれません。

arm-none-eabi-gcc を使用しています。ビット パッキングについては知っていますが、この最適化を回避できません。

編集:ビットパッキングについて十分に知らなかったことがわかりました:D