問題タブ [bitfoo]
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.
language-agnostic - ジグザグデコード
googleプロトコルバッファエンコーディングの概要では、「ジグザグエンコーディング」と呼ばれるものが導入されています。これは、大きさが小さい符号付き数値を取得し、大きさが小さい一連の符号なし数値を作成します。
例えば
等々。彼らがこれのために与えるエンコーディング関数はかなり賢いです、それは次のとおりです:
これがどのように機能するかは理解していますが、これを逆にして符号付き32ビット整数にデコードする方法を一生理解することはできません。
language-agnostic - 正しいkademliaバケットを見つける最も簡単な方法
Kademliaプロトコルでは、ノードIDは160ビットの数値です。ノードはバケットに格納され、バケット0は最後のビットを除いてこのノードと同じIDを持つすべてのノードを格納し、バケット1は最後の2ビットを除いてこのノードと同じIDを持つすべてのノードを格納します。 160個のバケットすべてでオンになります。
新しいノードを配置する必要があるバケットを見つけるための最速の方法は何ですか?
バケットを単純に配列に格納しているので、次のようなメソッドが必要です。
明らかなアプローチは、最上位ビットから作業を進め、違いが見つかるまでビットごとに比較することです。巧妙なビットの調整に基づいたより良いアプローチがあることを望んでいます。
実用上の注意:私のInt160は20項目のバイト配列に格納されているため、この種の構造で適切に機能するソリューションが推奨されます。
algorithm - 配列の最後のNビットを設定する
これはかなり単純なことだと思いますが、私には大きな精神的障害があるので、ここで少し助けが必要です!
私は5つの整数の配列を持っていますが、その配列にはすでにいくつかのデータが入力されています。配列の最後のNビットをランダムノイズに設定したいと思います。
これは主に言語に依存しませんが、私はC#で作業しているので、C#での回答に対するボーナスポイント
c# - ビット配列への追加
私のプログラムでは、160ビットの数値を表すためにBitArraysを使用しています。これらの数値を加算、減算、インクリメント、およびデクリメントできるようにしたいのですが、これを行うためのアルゴリズムは何ですか?
現時点では掛け算や割り算には興味がありませんが、将来的にはボーナスポイントになるかもしれません。
私はC#で実装していますが、言語に精通していない場合は擬似コードで問題ありません
c# - 共通プレフィックスの長さを 2 バイト単位で求める
2 バイトが与えられた場合、2 バイトの先頭にある共通ビットの長さを見つけるにはどうすればよいでしょうか。
例えば:
私は C# で作業しているので、C# 操作のみに固執してください。
補遺: この特定のコードは何千回も実行されるため、非常に高速である必要があります。