問題タブ [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.
algorithm - 32ビット整数で設定されたビット数を数える方法は?
数値 7 を表す 8 ビットは次のようになります。
3 ビットが設定されます。
32 ビット整数の設定ビット数を決定するアルゴリズムは何ですか?
c++ - #define、enum、またはconstを使用する必要がありますか?
私が取り組んでいるC++プロジェクトでは、 4つの値を持つことができるフラグの種類の値があります。これらの4つのフラグを組み合わせることができます。フラグはデータベース内のレコードを記述し、次のようになります。
- 新記録
- 削除されたレコード
- 変更されたレコード
- 既存の記録
ここで、レコードごとにこの属性を保持したいので、列挙型を使用できます。
ただし、コードの他の場所では、ユーザーに表示するレコードを選択する必要があるため、次のように、それを単一のパラメーターとして渡すことができるようにしたいと思います。
だから、私には3つの可能なアプローチがあるようです:
また
また
スペース要件は重要です(バイト対整数)が、重要ではありません。定義を使用すると型の安全性がenum
失われ、スペース(整数)が失われるため、ビット演算を実行するときにキャストする必要があります。ランダムが誤って侵入する可能性がconst
あるため、私も型安全性を失うと思います。uint8
他にもっときれいな方法はありますか?
そうでない場合は、何を使用しますか、またその理由は何ですか。
PS残りのコードは、#define
sのない最新のC ++でかなりクリーンであり、名前空間とテンプレートをいくつかのスペースで使用しているので、それらも問題ありません。
c - ガロア体演算で y = x*x を最適化する
GF(8) で乗算を行うこの C コードがあります。
それは多かれ少なかれ教科書の実装です。
a が常に b であると断言できる場合、上記のアルゴリズムに巧妙な最適化があるのではないかと思います。たとえば、乗算の代わりに 2 乗を行います。私はところで暗号化を使用した後ではありません。GF(8) の x*x が x のビットをゼロ ビットで 1 つずつインターリーブするという事実を利用したいだけです。
ビットインターリーブを行うための非常に巧妙な方法がすでにありますが、GF(8) の x*x がビットインターリーブを行うことを (偶然に) 知ったので、ビットインターリーブにそれを使用しようとするのを止めることはできません。最適化。
何か案は?
c - 特定のビットが 1 または 0 であることを確認して、バイト フラグをチェックするにはどうすればよいですか?
バイトを使用して のようなフラグを格納します。特定のビットがまたは10101010
であることを確認する方法を知りたいです。1
0
language-agnostic - ビットごとのシフト (ビットシフト) 演算子とは何ですか? また、どのように機能しますか?
私は暇なときに C を学ぼうとしていますが、他の言語 (C#、Java など) も同じ概念 (および多くの場合、同じ演算子) を持っています...
私が疑問に思っているのは、コア レベルでは、ビット シフト ( <<
、>>
、>>>
) が何をするのか、それがどのような問題を解決するのに役立つのか、曲がり角に潜んでいる問題は何かということです。言い換えれば、ビット シフトのすべての良さを理解するための完全な初心者向けガイドです。
c++ - 1つのlonglongintから4つのunsignedshortintを抽出するにはどうすればよいですか?
1つのlonglongintがあり、そのビットを取得して、それから4つのunsignedshortintを作成するとします。
ここでは、特定の順序はそれほど重要ではありません。
私は一般的に、ビットをシフトしてunsignedshortintのサイズに切り捨てる必要があることを知っています。でもどこかで変な間違いをするかもしれないと思うのでお願いします。
bit-manipulation - この変換を実行するための Bit Twiddle
2進数に対して次のことを行う方法について、誰かが洞察を持っているかどうか興味があります:
変換
それで、
これが単純な反転ではないことを明確にするために:
私は正規表現を考えていましたが、2進数を扱っていて、そのままにしたいと思っています。少しいじっているハックのページでも、私には何の洞察も得られませんでした。これは明らかにセルオートマトンの本質を持っています。それで、誰かがこれを処理できるいくつかのビット操作を持っていますか? (コードは必要ありません。その方法は知っています)。
sql - SQLレコードの多くのフラグを処理する方法
SQL2k8テーブルで比較的大きなフラグのセットを処理する方法についてアドバイスが必要です。
2つの質問、我慢してください:)
1つのレコードに保存したいフラグが20個あるとします。
例えば:
CanRead = 0x1 CanWrite = 0x2 CanModify =0x4...などで最終フラグ2^20
ここで、1つのレコードの次の組み合わせを設定すると、次のようになります。書ける
WHERE(Permissions&CanRead)= CanReadを実行すると、そのレコードに許可が必要かどうかを簡単に確認できます。
それはうまくいきます。
ただし、書き込みまたは変更が可能なすべてのレコードも取得したいと思います。
WHERE(Permissions&(CanWrite | CanModify))=(CanWrite | CanModify)を発行すると、アクセス許可がCanRead|に設定されているレコードを取得できません。書ける
言い換えると、プロシージャに送信しているマスク内のフラグのいずれかに一致するレコードを見つけるにはどうすればよいですか?
2番目の質問、SQL 2008のパフォーマンスはどの程度ですか?実際には、20ビットフィールドを作成する方が良いでしょうか?
ご協力いただきありがとうございます
sql - SQL Server で少し反転するにはどうすればよいですか?
SQL Server でビット単位の NOT を実行しようとしています。私はこのようなことをしたいと思います:
注:これを書き始めて、書き終える前に自分の質問に対する答えを見つけました。このドキュメントは MSDN に欠けていたので、コミュニティと共有したかったのです (MSDN のコミュニティ コンテンツにも追加するまでは)。