タグ付けされた質問 「bit-manipulation」

個々のビットの操作。使用される演算子には、ビット単位のAND、OR、XOR、NOT、左シフト、および右シフトがあります。

12
すべての文字が一意であるかどうかを判断するためのビットベクトルの使用について説明する
これを実行するためにビットベクトルがどのように機能するかについて、私は混乱しています(ビットベクトルに慣れすぎていません)。ここに与えられたコードです。誰かが私にこれを説明してもらえますか? public static boolean isUniqueChars(String str) { int checker = 0; for (int i = 0; i < str.length(); ++i) { int val = str.charAt(i) - 'a'; if ((checker & (1 << val)) > 0) return false; checker |= (1 << val); } return true; } 特に、何をしcheckerているのですか?


10
^ = 32の背後にあるアイデアは何ですか?小文字を大文字に、またはその逆に変換しますか?
コードフォースに関するいくつかの問題を解決していました。通常、私は最初に文字が大文字か小文字かをチェックし、次に減算または加算32して対応する文字に変換します。しかし、私は誰かが^= 32同じことをするためにやることを見つけました。ここにあります: char foo = 'a'; foo ^= 32; char bar = 'A'; bar ^= 32; cout << foo << ' ' << bar << '\n'; // foo is A, and bar is a これについての説明を探しましたが、わかりませんでした。なぜこれが機能するのですか?

9
XORがハッシュを結合するデフォルトの方法であるのはなぜですか?
2つのハッシュがH(A)ありH(B)、それらを結合したいとします。私は、2つのハッシュを組み合わせるための良い方法はXORそれらにあることを読んだ、例えばXOR( H(A), H(B) )。 私が見つけた最良の説明は、これらのハッシュ関数ガイドラインについてここで簡単に触れられています: ほぼランダムな分布で2つの数値をXORすると、ほぼランダムな分布*を持つ別の数値になりますが、これは2つの値に依存します。 ... *組み合わせる2つの数値の各ビットで、2つのビットが等しい場合は0が出力され、それ以外の場合は1が出力されます。つまり、組み合わせの50%では1が出力されます。したがって、2つの入力ビットがそれぞれ約50〜50の確率で0または1になる可能性がある場合、出力ビットも同様です。 XORが(ORやANDなどではなく)ハッシュ関数を組み合わせるためのデフォルトの演算である必要がある理由の直観や数学について説明できますか?

8
'and'(ブール値)と '&'(ビット単位)-リストとnumpy配列の動作に違いがあるのはなぜですか?
リストとNumPy配列のブール演算とビット演算の動作の違いを説明するものは何ですか? 次の例に示すように、Python で&vs andを適切に使用する方法について混乱しています。 mylist1 = [True, True, True, False, True] mylist2 = [False, True, False, True, False] >>> len(mylist1) == len(mylist2) True # ---- Example 1 ---- >>> mylist1 and mylist2 [False, True, False, True, False] # I would have expected [False, True, False, False, False] # ---- Example …

3
このランダムな値に50/50ではなく25/75の分布がある理由
編集:基本的に私が書こうとしているのはの1ビットのハッシュですdouble。 私はマッピングするdoubleにtrueまたはfalse50/50チャンスと。そのために、いくつかの乱数を選択するコードを書きました(例として、規則性のあるデータでこれを使用し、それでも50/50の結果を取得したい)、最後のビットをチェックし、y1であるかn、それが0。 ただし、このコードでは常に25%yと75%になりnます。なぜ50/50ではないのですか?そして、なぜこのように奇妙だが単純な(1/3)分布なのか? public class DoubleToBoolean { @Test public void test() { int y = 0; int n = 0; Random r = new Random(); for (int i = 0; i < 1000000; i++) { double randomValue = r.nextDouble(); long lastBit = Double.doubleToLongBits(randomValue) & 1; if (lastBit == 1) { …


15
#define、enum、またはconstを使用する必要がありますか?
私が取り組んでいるC ++プロジェクトでは、4つの値を持つことができるフラグの種類の値があります。これらの4つのフラグは組み合わせることができます。フラグはデータベースのレコードを表し、次のいずれかになります。 新記録 削除されたレコード 変更されたレコード 既存の記録 ここで、各レコードに対してこの属性を保持したいので、列挙型を使用できます。 enum { xNew, xDeleted, xModified, xExisting } ただし、コードの他の場所では、ユーザーに表示するレコードを選択する必要があるため、次のように、それを単一のパラメーターとして渡すことができます。 showRecords(xNew | xDeleted); だから、私は3つの可能なアプローチがあるようです: #define X_NEW 0x01 #define X_DELETED 0x02 #define X_MODIFIED 0x04 #define X_EXISTING 0x08 または typedef enum { xNew = 1, xDeleted, xModified = 4, xExisting = 8 } RecordType; または namespace RecordType …

22
設定されている最下位ビットの位置
整数に設定されている最下位ビットの位置を決定する効率的な方法を探しています。たとえば、0x0FF0の場合は4になります。 簡単な実装は次のとおりです。 unsigned GetLowestBitPos(unsigned value) { assert(value != 0); // handled separately unsigned pos = 0; while (!(value & 1)) { value >>= 1; ++pos; } return pos; } それからいくつかのサイクルを絞る方法はありますか? (注:この質問は、そのようなことを楽しむ人のためのものであり、xyzoptimizationは悪だと言われるためのものではありません。) [編集] アイデアをありがとう!他にもいくつかのことを学びました。涼しい!

27
Cで整数の最上位セットビット(msb)を見つけるための最速/最も効率的な方法は何ですか?
整数nがあり、最上位ビットの位置を知りたい場合(つまり、最下位ビットが右側にある場合、1である左端のビットの位置を知りたい)、見つけるための最も速く/最も効率的な方法は何ですか? 私はPOSIX ffs()が最初のセットビットを見つけるためにstrings.hのメソッドをサポートしていることを知っていますが、対応するものがないようですfls()メソッド。 これを行うための本当に明らかな方法はありますか? 移植性のためにPOSIX関数を使用できない場合はどうですか? 編集:32ビットと64ビットの両方のアーキテクチャで機能するソリューションについてはどうですか(多くのコードリストは32ビットの整数でしか機能しないように見えます)。


30
C / C ++でバイトのビットの順序を逆にする最も簡単な方法は何ですか?
バイトのビット順序を逆にする方法は複数ありますが、開発者が実装するのに「最も簡単」なものは何なのか、私は知りたいです。そして、逆に言うと、 1110 -> 0111 0010 -> 0100 これは、この PHPの質問と似ていますが、重複していません。 これは、この Cの質問と似ていますが、重複していません。この質問は、開発者が実装する最も簡単な方法を求めています。「最適なアルゴリズム」は、メモリとCPUのパフォーマンスに関係しています。
110 c++  c  bit-manipulation 

16
ビット演算と使用法
このコードを考えてみましょう: x = 1 # 0001 x << 2 # Shift left 2 bits: 0100 # Result: 4 x | 2 # Bitwise OR: 0011 # Result: 3 x & 1 # Bitwise AND: 0001 # Result: 1 Python(および他の言語)の算術演算子は理解できますが、「ビット単位」演算子についてはよく理解できませんでした。上記の例(Pythonの本から)では、左シフトは理解できますが、他の2つは理解できません。 また、実際に使用されるビット演算子は何ですか?いくつかの例をいただければ幸いです。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.