問題タブ [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.

0 投票する
63 に答える
588639 参照

algorithm - 32ビット整数で設定されたビット数を数える方法は?

数値 7 を表す 8 ビットは次のようになります。

3 ビットが設定されます。

32 ビット整数の設定ビット数を決定するアルゴリズムは何ですか?

0 投票する
15 に答える
67084 参照

c++ - #define、enum、またはconstを使用する必要がありますか?

私が取り組んでいるC++プロジェクトでは、 4つの値を持つことができるフラグの種類の値があります。これらの4つのフラグを組み合わせることができます。フラグはデータベース内のレコードを記述し、次のようになります。

  • 新記録
  • 削除されたレコード
  • 変更されたレコード
  • 既存の記録

ここで、レコードごとにこの属性を保持したいので、列挙型を使用できます。

ただし、コードの他の場所では、ユーザーに表示するレコードを選択する必要があるため、次のように、それを単一のパラメーターとして渡すことができるようにしたいと思います。

だから、私には3つの可能なアプローチがあるようです:

また

また

スペース要件は重要です(バイト対整数)が、重要ではありません。定義を使用すると型の安全性がenum失われ、スペース(整数)が失われるため、ビット演算を実行するときにキャストする必要があります。ランダムが誤って侵入する可能性がconstあるため、私も型安全性を失うと思います。uint8

他にもっときれいな方法はありますか?

そうでない場合は、何を使用しますか、またその理由は何ですか。

PS残りのコードは、#definesのない最新のC ++でかなりクリーンであり、名前空間とテンプレートをいくつかのスペースで使用しているので、それらも問題ありません。

0 投票する
6 に答える
1096 参照

c - ガロア体演算で y = x*x を最適化する

GF(8) で乗算を行うこの C コードがあります。

それは多かれ少なかれ教科書の実装です。

a が常に b であると断言できる場合、上記のアルゴリズムに巧妙な最適化があるのではないかと思います。たとえば、乗算の代わりに 2 乗を行います。私はところで暗号化を使用した後ではありません。GF(8) の x*x が x のビットをゼロ ビットで 1 つずつインターリーブするという事実を利用したいだけです。

ビットインターリーブを行うための非常に巧妙な方法がすでにありますが、GF(8) の x*x がビットインターリーブを行うことを (偶然に) 知ったので、ビットインターリーブにそれを使用しようとするのを止めることはできません。最適化。

何か案は?

0 投票する
10 に答える
35082 参照

c - 特定のビットが 1 または 0 であることを確認して、バイト フラグをチェックするにはどうすればよいですか?

バイトを使用して のようなフラグを格納します。特定のビットがまたは10101010であることを確認する方法を知りたいです。10

0 投票する
11 に答える
765480 参照

language-agnostic - ビットごとのシフト (ビットシフト) 演算子とは何ですか? また、どのように機能しますか?

私は暇なときに C を学ぼうとしていますが、他の言語 (C#、Java など) も同じ概念 (および多くの場合、同じ演算子) を持っています...

私が疑問に思っているのは、コア レベルでは、ビット シフト ( <<>>>>>) が何をするのか、それがどのような問題を解決するのに役立つのか、曲がり角に潜んでいる問題は何かということです。言い換えれば、ビット シフトのすべての良さを理解するための完全な初心者向けガイドです。

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

c++ - 1つのlonglongintから4つのunsignedshortintを抽出するにはどうすればよいですか?

1つのlonglongintがあり、そのビットを取得して、それから4つのunsignedshortintを作成するとします。

ここでは、特定の順序はそれほど重要ではありません。

私は一般的に、ビットをシフトしてunsignedshortintのサイズに切り捨てる必要があることを知っています。でもどこかで変な間違いをするかもしれないと思うのでお願いします。

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

bit-manipulation - この変換を実行するための Bit Twiddle

2進数に対して次のことを行う方法について、誰かが洞察を持っているかどうか興味があります:

変換

それで、

これが単純な反転ではないことを明確にするために:

私は正規表現を考えていましたが、2進数を扱っていて、そのままにしたいと思っています。少しいじっているハックのページでも、私には何の洞察も得られませんでした。これは明らかにセルオートマトンの本質を持っています。それで、誰かがこれを処理できるいくつかのビット操作を持っていますか? (コードは必要ありません。その方法は知っています)。

0 投票する
8 に答える
4440 参照

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ビットフィールドを作成する方が良いでしょうか?

ご協力いただきありがとうございます

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

sql - SQL Server で少し反転するにはどうすればよいですか?

SQL Server でビット単位の NOT を実行しようとしています。私はこのようなことをしたいと思います:

注:これを書き始めて、書き終える前に自分の質問に対する答えを見つけました。このドキュメントは MSDN に欠けていたので、コミュニティと共有したかったのです (MSDN のコミュニティ コンテンツにも追加するまでは)。

0 投票する
12 に答える
44743 参照

optimization - 整数を 3 で割る最速の方法は何ですか?