いくつかのビットシフト操作を実行し、JavaScript で 2 進数を処理しようとしています。
これが私がやろうとしていることです。ユーザーが値を入力すると、それを使用して次のことを行います。
// Square Input and mod with 65536 to keep it below that value
var squaredInput = (inputVal * inputVal) % 65536;
// Figure out how many bits is the squared input number
var bits = Math.floor(Math.log(squaredInput) / Math.log(2)) + 1;
// Convert that number to a 16-bit number using bitshift.
var squaredShifted = squaredInput >>> (16 - bits);
数値が 46 より大きい限り、機能します。46 未満になると機能しません。私は問題がビットシフトであることを知っています。現在、C のバックグラウンドを持っているため、すべての数値が 32 ビット形式で格納されるため、これは別の方法で行われることがわかっています (それがint
. JavaScript は同じことを行いますか (var
型付けされていないため)?
もしそうなら、16ビットの数値を格納することは可能ですか? そうでない場合、それを 32 ビットとして扱い、16 ビットであると仮定するために必要な計算を行うことはできますか?
注: の 16 ビット値の中間の 4 ビットを抽出しようとしていますsquaredInput
。
別の注意: var を出力すると、パディングなしで値が出力されるだけなので、わかりませんでした。と を使用parseInt
してみtoString
ました。
ありがとう