問題タブ [bits]

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

php - PHPを使用して3ビット長のバイナリデータを大量に保存する

私のPHPプログラムは、0から7の範囲の値の配列を処理しています。これらの値をPHPに格納するための最も効果的な方法を見つけようとしています。最も効果的なのは、使用するビット数を減らすことです。

各値に必要なストレージスペースは3ビット(b000=0からb111=7)のみであることは明らかです。しかし、これらの3ビット値をバイナリ文字列に格納する最も効率的な方法は何ですか?

保存または復元する必要のある3ビット値の数は事前にわかりませんが、大量になる可能性があるため、64ビットでは明らかに不十分です。

pack()とunpack()を調べていました。各バイトに2つの値を格納し、pack('C'、$ twoValues)を使用できましたが、それでも2ビットが失われています。

それは機能しますか?それらの値を保存するより効果的な方法はありますか?

ありがとう

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

c - N ビットと次の N ビットを混合 (例: 各 4 ビット) 00001111 -> 01010101

この質問のタイトルが示すように、整数 (特に 64 ビット符号なし) 内でビットのブロックを混合する最良の方法を知りたい

たとえば、私は 8 ビットの整数を持っています。ここで、ビットは 0000 1111 で、4 ビットを 4 ビットで混ぜます = 0101 0101

例 2: 0010 0110
0 1 1 0 右 0.0.1.0 左 = 00011100 4 ビットを 4 ビットずつ混合 = 0001 1100 簡単には、 . 右ブロックのビットで満たされた場所

私が今していること:

setbit は、特定の位置のビットを設定またはクリアするマクロです。正確に必要な のは、各 32 ビットを次の 32 ビットと混合する、各 16 ビットを次の 16 ビットと混合する、各 16 ビットを次の 16 ビットと混合する、各 8 ビットを次の 8 ビットと混合する などです。私はグーグルでよく見ましたが、そのようなシナリオを示さないチュートリアルで終わりました。

元気でね。

0 投票する
7 に答える
236450 参照

binary - nビットで表現できる値はいくつですか?

たとえば、 の場合n=9、9 桁の 2 進数 (ビット) で表すことができる値の数は?

私の考えでは、これらの 9 ビットのそれぞれを 1 に設定すると、それらの 9 桁が表すことができる最大の数ができるようになります。したがって、最高値は10 進数1 1111 1111で等しいです。511したがって、9 桁の 2 進数で 511 の異なる値を表すことができると結論付けています。

私の思考プロセスは正しいですか?そうでない場合、誰かが私が欠けているものを親切に説明してもらえますか? どうすればnビットに一般化できますか?

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

c - showbits()関数

「LetusC」という本を読んでいるshowbit()と、数字のビットを表示できる関数が存在することがわかりました。そのために言及された特別なヘッダーファイルはありませんでした。インターネットで検索しましたが、何も役に立ちませんでした。そのような機能はありますか?これで10進数の2進数を出力したいと思います。それ以外の場合は、交換機能をお願いします。ありがとう

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

java - byte[]配列から任意の長さのビットシーケンスを効率的に抽出します

任意の位置で任意の長さ(0<=長さ<=16)の(符号なし)ビットシーケンスを抽出する最も効率的な方法を探しています。スケルトンクラスは、私の現在の実装が本質的に問題をどのように処理するかを示しています。

これは機能しますが、より効率的なソリューション(パフォーマンスの面で)を探しています。バイト配列は、数バイトから最大1800バイトまでの比較的小さいことが保証されています。配列は、readメソッドの各呼び出しの間に1回だけ(完全に)読み取られます。配列を超えるなど、getBits()でエラーチェックを行う必要はありません。


上記の私の最初の質問は十分に明確ではないようです。Nビットの「ビットシーケンス」はNビットの整数を形成し、最小限のオーバーヘッドでそれらの整数を抽出する必要があります。値はルックアップインデックスとして使用されるか、何らかの計算に直接入力されるため、文字列は使用しません。したがって、基本的に、上記のスケルトンは実際のクラスであり、getBits()シグネチャは、コードの残りの部分がどのように相互作用するかを示します。


サンプルコードをマイクロベンチマークに拡張し、blitzpastaのソリューションを含めました(欠落しているバイトマスキングを修正しました)。私の古いAMDボックスでは、〜11400ms対〜38000msであることがわかりました。参考:パフォーマンスを損なうのは除算とモジュロ演算です。/ 8>>3に、%8&7に置き換えると、両方のソリューションは互いにかなり近くなります(jdk1.7.0ea104)。


どのように、何に取り組むべきかについて少し混乱があったようです。サンプルコードの最初の元の投稿には、バイトバッファがいつどこでいっぱいになったのかを示すread()メソッドが含まれていました。これは、コードがマイクロベンチに変換されたときに失われました。これをもう少し明確にするために、再導入しました。アイデアは、getBits()とprepareBitGet()を実装する必要があるBitArrayの別のサブクラスを追加することによって、既存のすべてのバージョンを打ち負かすことです。後者は空の場合があります。ソリューションに利点を与えるためにベンチマークを変更しないでください。既存のすべてのソリューションに対して同じことができるため、これは完全に無意味な最適化になります。(本当!!)

私はVersion0を追加しました。これは、bitGet状態をインクリメントするだけです。ベンチマークのオーバーヘッドがどれほど大きいかを大まかに把握するために、常に0を返します。比較のためだけにあります。

また、MSNのアイデアへの適応が追加されました(バージョン3)。すべての競合他社にとって公平で比較可能なものを維持するために、バイト配列の入力がベンチマークの一部であり、準備ステップでもあります(上記を参照)。もともとMSNのソリューションはあまりうまく機能しなかったため、int[]バッファの準備に多くのオーバーヘッドがありました。私はそのステップを少し自由に最適化したので、それは激しい競争相手になりました:)また、私があなたのコードを少しデコンボリューションしたことに気付くかもしれません。getBit()を3ライナーに凝縮し​​て、おそらく1〜2パーセント削減することができます。コードを読みやすくするために、また他のバージョンも可能な限り凝縮されていないため、意図的にこれを行いました(これも読みやすさのためです)。


結論(上記のコード例は、該当するすべての貢献に基づくバージョンを含むように更新されています)。私の古いAMDボックス(Sun JRE 1.6.0_21)では、次のように表示されます。

V0実装なし5384ミリ秒
V1デュランダル(元)は10283ミリ秒かかりました
V2ブリッツパスタ(適応)は12212ミリ秒かかりました V3 MSN(投稿)は11030ミリ秒かかりました V4 MSN(ハーフバッファー変更)は9700ミリ秒かかりました

注:このベンチマークでは、getBits()の呼び出しごとに平均7.5ビットがフェッチされ、各ビットは1回だけ読み取られます。V3 / V4は高い初期化コストを支払う必要があるため、フェッチが多く、フェッチが短いほど、実行時の動作が向上する傾向があります(その結果、平均フェッチサイズが最大16に近づくほど悪化します)。それでも、V4は、すべてのシナリオで他のすべてよりもわずかに進んでいます。実際のアプリケーションでは、キャッシュの競合を考慮に入れる必要があります。これは、V3 / v4に必要な余分なスペースにより、キャッシュミスが増加し、V0がより適切なポイントになる可能性があるためです。アレイを複数回トラバースする場合は、V4を優先する必要があります。これは、アレイが他のすべてよりも高速にフェッチし、最初のパス後にコストのかかる初期化が償却されるためです。

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

java - Java でのテキスト ファイルへのビットの読み取りと書き込み

いくつかの圧縮アルゴリズムを実装しようとしていますが、Java でビットを処理する必要があります。

私がする必要があるのは、値1を書き込んでから値2を書き込むと、これらの数値がファイルにビットとして格納されるため、ファイルサイズは2ではなく1バイトになります.1は1ビットに格納され、2は2 ビットで格納されます。

出来ますか?どうもありがとう

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

python - Python で TCP 経由で受信した文字列の非バイナリ (16 進数) 文字

初心者の質問かもしれませんが、TCP 経由でデータを受信して​​おり、文字列を見ると次のようになります。

\x00\r\xeb\x00\x00\x00\x00\x01t\x00

その\r文字とは何ですか? tinとは\x01tどういう意味ですか?

ググってみたけど何をググればいいのかわからない…

ありがとう。

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

c# - C#:手動ビット変換?

を使用するよりもこれを書く良い方法はありBitConverterますか?

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

c# - C#127 =このビット文字列なのはなぜですか?

整数のすべてのビットを出力するこのコードを考えると、次のようになります。

 

なぜそれが印刷されるのですか?

まず、最後の7桁が1であると予想されるので、私は正しくルーパーですか?

第二に、なぜ真ん中に1があるのですか?末尾の71を除いて、すべて0になると思います。

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

java - Java ビットの操作

まず、プログラミングでビットを実際に扱ったことは一度もありません。3 つの状態になるオブジェクトがあり、3 ビット配列を使用してそれらの状態を表現したいと考えています。
例:

私はレースカーを持っていて、静止状態で前進、左、右に移動できます。ビットは 000 になります
。車が前進している場合、ビットは 010 になります。前進し、左に移動している場合、ビットは 110 になります。

ビットをどのように設定し、値を取得するためにそれらを読み戻すにはどうすればよいですか?