問題タブ [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.
javascript - 2.9999999999999999 >> .5?
Math.floor() を使用する代わりに、数値を .5 だけ右シフトできると聞きました。その制限を確認して適切な代替品であることを確認することにしたので、次の値を確認し、Google Chrome で次の結果を得ました。
いくつかいじった後、Chrome と Firefox では、2 を 0.5 だけ右にシフトすると 2 になる可能性のある最大値は 2.9999999999999997779553950749686919152736663818359374999999¯ (9 の繰り返し) であることがわかりました。番号は IE では 2.9999999999999997779¯ です。
私の質問は: .000000000000000777955395074968691915273663818359374 という数字の意味は何ですか? とても奇妙な数字で、私の好奇心を刺激しました。
私は答えまたは少なくともある種のパターンを見つけようとしていますが、私の問題は、ビット単位の操作を本当に理解していないという事実にあると思います。原理的には理解できますが、ビット シーケンスを 0.5 ずつシフトすることは、私にはまったく意味がありません。どんな助けでも大歓迎です。
記録のために、奇妙な数字シーケンスは 2^x で変わります。適切に切り捨てられる次の数値の可能な最大値:
sql - ビットマスクのサイズに実質的な制限はありますか?
ビットマスクを使用して、複数の値を 1 つの変数に格納する一般的な方法があります。たとえば、ユーザーがアイテムに対する読み取り、書き込み、および実行の権限を持っている場合、それを 1 つの数字に変換するには、read = 4 (2^2), write = 2 (2^1), execute = 1 (2^0)
これらを足し合わせて 7 を取得します。
私はこの手法をいくつかの Web アプリケーションで使用しています。通常、変数をフィールドに格納し、異なる値の数に応じて MEDIUMINT などの型を指定します。
私が興味を持っているのは、このように保存できる値の数に実際的な制限があるかどうかです? たとえば、数値が 64 を超えると、(64 ビット) 整数を使用できなくなります。この場合、あなたは何を使いますか?プログラム ロジックにどのような影響がありますか (つまり、ビットごとの比較を引き続き使用できますか)。
非常に大きな値のセットを取得し始めると、別の方法が最適なソリューションになることはわかっていますが、この方法の境界に興味があります。
c# - C# のビットフィールド
だから、ビットフィールド。具体的には、大きなビットフィールド。ビットフィールドで個々の値を操作する方法は理解していますが、次のような大規模なセットでこれを行うにはどうすればよいでしょうか。
私が抱えている特定の問題は、配列全体を通過する左右のシフトを行うことです。たとえば、>> 4
上記の配列で a を実行すると、次のようになります。
さて、ここでの(過度に)単純化されたアルゴリズムは次のようになります(これは私がオンザフライでコードを書いているところです):
この種のデータの操作を容易にするものは組み込まれていますか?
c++ - C ++でcharの整数値を取得するにはどうすればよいですか?
32ビットのunsignedintに格納されている値を取得し、それを4つの文字に入れてから、これらの各文字の整数値を文字列に格納したいと思います。
最初の部分は次のようになると思います。
java - Javaでintを3バイトに変換するにはどうすればよいですか?
私はそれを表すint
3つ(ビッグエンディアン)に変換しようとしています。bytes
int
ビット単位およびビットシフトと関係があると確信しています。しかし、私はそれを行う方法がわかりません。
例えば:
*注: int は 4 バイトであり、3 バイトがオーバーフロー/アンダーフローする可能性があることは承知しています。
c - K&R C の第 2 章の「getbits()」メソッドを理解するのに助けが必要
第 2 章のビット演算子に関するセクション (セクション 2.9) で、サンプル メソッドの 1 つがどのように機能するかを理解するのに苦労しています。
提供されるメソッドは次のとおりです。
考え方は、指定された数値x に対して、位置pから始まるnビットを右から数えて返すというものです(右端のビットが位置 0 になります)。次の方法を考えます。main()
出力は次のとおりです。
getbits(63892 (f994), 4, 3) = 5 (5)
私はこれの一部を理解していますが、主に私が理解していないビット (しゃれは意図していません) のために、「全体像」に問題があります。
私が特に問題を抱えている部分は、補足部分です: ~(~0 << n)
. xを扱う最初の部分を取得したと思います。私が苦労しているのはこの部分 (そしてマスク) であり、実際にそれらのビットを取得するためにすべてがどのように組み合わされるかです。(コードと calc.exe を使用して結果をチェックすることの両方で、それが実行されていることを確認しました。バイナリ ビューがあることを神に感謝します!)
何か助けはありますか?
numbers - ビット単位の演算で整数の N 桁目を取得する方法は?
例。123456 で、右から 3 番目 ('4') が必要です。
実際の考え方は、各桁に個別にアクセスすることです (つまり、6 5 4 3 2 1)。
C/C++/C# を推奨。
networking - ネットワーク ビット数からネットマスクに変換する最良の方法は何ですか?
たとえば、172.20.10.0/24 のようなネットワーク仕様がある場合、「24」がビット数です。それを 0xffffff00 のようなネットマスクに変換する最良の方法は何ですか?
c - 比較演算子を使用せず、if、else などを使用せずに、2 つの整数の最大値をプログラムで返すにはどうすればよいですか?
if
比較演算子を使用せず、 、 などを使用せずに、最大 2 つの整数をプログラムで返すにはどうすればよいelse
ですか?
parsing - 構成可能なパーサーを作成する方法に関する提案
C のような言語用のパーサーを作成したいと考えています。興味深い点は、ソースにアクセスできる人が簡単に変更して言語 (インスタンスの新しい式タイプ) を拡張し、実行時に構成可能な拡張機能を使用できるようにビルドしたいということです (それらはオンとオフを切り替えます)。
私の現在の意図は、再帰的なまともなパーサーをオブジェクトとして構築することです。各プロダクションはオブジェクトのメソッドになります。拡張の方法は、必要に応じてメソッド (およびプロダクション定義) を置き換えるこのベースからクラスを派生させることです。私はまだ拡張機能を組み合わせて一致させる方法を理解しようとしています. 1 つのアイデアは、v-tbl でゲームをプレイすることです。オブジェクトは、ベースのコピーである v-tbl で構築されますが、メソッドは派生クラスから置き換えられます。
ソリューションのビットいじりの性質を除けば、私が抱えている唯一の問題は
- v-tbl mixup を行う合理的な方法
- 2 つの拡張機能が同じプロダクションを変更した場合の対処方法 (ほとんどの置換では、1 つの置換呼び出しを持つオリジナルを呼び出すことになるため、もう 1 つの置換呼び出しは機能しますが、これを設定するメカニズムが問題です)
- 拡張機能の拡張を許可する方法 (これは最終的に標準の MI システムのように見えるかもしれませんが、どのように機能するかはわかりません)
別の解決策 (同じアプローチのもう少し平凡なバージョン) は、静的メンバー変数を使用して関数ポインターを格納し、同じ効果のためにそれらを呼び出すことです。
編集: BNF 定義からプロダクションを構築できるシステムを既に構築しています。私が決定したことをサポートするように変更できます。