問題タブ [bit-manipulation]
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 - 実数 (固定/浮動小数点) 値をクランプする最速の方法は?
if ステートメントや三項演算子を使用するよりも効率的に実数をクランプする方法はありますか? double と 32 ビットのフィックスポイント実装 (16.16) の両方でこれを行いたいと考えています。両方のケースを処理できるコードを求めているわけではありません。それらは別の関数で処理されます。
明らかに、私は次のようなことができます:
また
フィックスポイント バージョンは、比較のために関数/マクロを使用します。
これはコードのパフォーマンスが重要な部分で行われるため、可能な限り効率的な方法を探しています (これにはビット操作が含まれると思われます)。
編集: 標準/移植可能な C でなければならず、プラットフォーム固有の機能はここでは重要ではありません。また、MY_MIN
とMY_MAX
は、クランプしたい値と同じタイプです (上記の例では double)。
windows - ビット単位でバッチファイルを作成するにはどうすればよいですか?
以下で試してみましたが、「現時点では予想外でした」とだけ表示されます。
language-agnostic - 整数内の単一の1ビットストリームの検出
次の基準を満たしているかどうかを確認する必要があります。
- バイナリでは、すべての1ビットが連続している必要があります。
- 番号には少なくとも1つのビットが設定されている必要があります。
- 連続する1ビットはMSBで開始するか、LSBで終了する可能性があるため、数値が単一の1ビットストリームとそれに続くゼロビットストリームで構成されている場合、またはその逆の場合は完全に有効です。
実際の問題についてこれらの条件をチェックする(データファイルの整合性をチェックする)コードを作成しました。
それは問題なく動作し、タイムクリティカルではありませんが、私は古いビットをいじくり回すフリークであり、そのようなパズルが大好きなので、シングル1ビットストリームをチェックするためのより賢い方法を考え出しました。
文字列がゼロで囲まれている場合は簡単ですが、特殊な場合には対応できません。
どんなアイデア、バイナリハック、部分的な解決策も大歓迎です!
要件をより明確にするために、いくつかの例を示します。次の数値は私の基準を満たしています。
次の数字はそうではありません(複数の連続した文字列があるため):
c - 次の 2 の累乗に切り上げる
最も近い次の 2 のべき乗を返す関数を書きたいと思います。たとえば、入力が 789 の場合、出力は 1024 である必要があります。ループを使用せずにビット単位の演算子を使用するだけでこれを達成する方法はありますか?
vb6 - (VB6) 32 ビット長を文字列に変換する*6 [AZ]
32 ビットの Long を [AZ] のみを使用する String*6 に変換したいと考えています。
VB6 を使用する (聞かないでください!)。
1 文字で 5 ビットを使用すると計算したので、32 ビットの長さから 6 文字を取得できます。
手がかりがないので、誰かがこれを行う方法についての指針を教えてもらえますか。
algorithm - ビットいじりによるラウンドロビン スケジューリングで次を見つける
次の問題を考えてみましょう。ワンホット エンコーディングで現在スケジュールされているスレーブを表すビット文字列があります。たとえば、「00000100」(左端のビットが #7、右端のビットが #0) は、スレーブ #2 がスケジュールされていることを意味します。
ここで、ひねりを加えて、ラウンド ロビン スケジューリング スキームで次にスケジュールされたスレーブを選択したいと思います。どのスレーブが実際にスケジュールされたいかを示す「リクエストマスク」があります。次の奴隷は希望者からのみ選ばれます。
いくつかの例 (左にローテーションすることでラウンドロビン スケジューリングが行われると仮定します)。例1:
- 現在:「00000100」
- マスク:「01100000」
- 次のスケジュール: "00100000" - 通常のラウンドロビンでは、#2 の後に #3、次に #4 が来るはずですが、要求がないため、#5 が選択されます。
例 2:
- 現在:「01000000」
- マスク:「00001010」
- 次: "00000010" - スケジューリングは左に循環することによって行われ、#1 はその順序で最初に要求しているスレーブです。
さて、これはループで簡単にコーディングできます。しかし、実際には、ループなしで少しいじる操作で結果を取得したいと考えています。動機: これを VHDL/Verilog のハードウェア (FPGA) に実装したい。
ボーナスは、任意の量のスレーブ N に対して汎用的なアルゴリズムを構成することです。
ところで、これは宿題の問題ではありません。何らかの方法でスレーブをスケジュールし、スレーブの要求によってスケジュールを調整したい場合はいつでも、これは重要な問題です。私の現在の解決策はやや「重い」ものであり、明らかな何かが欠けているかどうか知りたいと思っていました。
sql - ビット フィールドの SQL 論理 AND 演算子
多対多の関係を持つ 2 つのテーブルがあります。個人は多くのグループに所属できます。グループは多くの個人を持つことができます。
個人は基本的にプライマリキー ID を持っているだけです
グループには、プライマリ キー ID、個人 ID (個人テーブルの ID と同じ)、およびそのグループが個人のプライマリ グループであるかどうかを示すビット フラグがあります。
理論的には、グループ テーブル内の特定の個人の 1 つを除くすべてのエントリは、そのビット フラグを false に設定する必要があります。これは、すべての個人が 1 つのプライマリ グループを持つ必要があるためです。
私の現在のデータセットでは、この仮定が当てはまらないことはわかっています。また、すべてのグループのプライマリ フラグが false に設定されている個人が何人かいます。
それらの個人を返すクエリを生成するのに問題があります。
私が得た最も近いものは次のとおりです。
SELECT * FROM 個人 i LEFT JOIN グループ g ON g.IndividualID = i.ID WHERE g.IsPrimaryGroup = 0
しかし、フィールドは数値ではなくビット フィールドであるため、SUM または MAX を使用してさらに先に進むことはできません。
助言がありますか?
c# - ビットごとのORの組み合わせ
これは、最も使用されている正規表現関数の1つです。
Regex.IsMatchメソッドがどのように機能するか説明できますか?つまり、ビット単位のOR RegexOptionsパラメーターをどのように処理するのですか?メソッドパラメータをどのように定義しますか?
返信ありがとうございます!
javascript - JavaScript エンディアン エンコーディング?
SO に関する回答から、JavaScript は OS とブラウザ間で特定のエンディアン エンコーディングを保証するのでしょうか?
または別の言い方をすれば、JavaScript では整数のビット単位のシフトは「安全」ですか?