JavaScriptエンディアンエンコード?
-
20-08-2019 - |
質問
の対応につい もう思考はJavaScriptを保証するエンディアンエンコード全体のOs、ブラウザ?
というのはビット単位でシフト関数"安全"をJavaScript?
解決
はい、彼らは安全です。 JSビット操作は/ <「ハックされているので、あなたがのために願っていかもしれないスピードの利点を取得していないが、 A>」。
他のヒント
移動が安全ですが、ご質問に不備があっendiannessに影響しませんビットシフト操作ます。移動左のビッグ-リトルエンディアンシステムはありません。へのシフト(右で異なるものばかりでなく、通訳のサビないの相対的位置の任意のビット.)
Endiannessけできるオプションの通訳に一部のメモリブロックとしてのバイトとして大きな整数値です。一般に、Javascriptないオプションから得られないときには、いくつかのアクセスを任意ブロックメモリは、特に、ブロックメモリの占有による変数です。 入力配列 ナーを設けておりますのでご利用のデータをエンディアン-敏感な方、その発注により、ホストシステムたちの見解を示すものではない、同じすべてのJavascriptのホスト環境です。
Endianness記述する 物理 貯めない 論理 保管する。論理的に、もっとも右側のビットが 常に にする必要があります。るかどうかのビットのバイトが存在する最小メモリアドレスは全く別の問題、いろんな事言語に挑むようなコンセプトとして"最小メモリアドレス"をJavascriptではできません。入力配列が互いがそのコンテキスト内の入力配列;彼らはまだわからないなどへのアクセス保管の任意のデータです。
これらの答えのいくつかは、日付されているので、エンディアンの型指定された配列を使用している場合が関連することができます!考えてみます:
var arr32 = new Uint32Array(1);
var arr8 = new Uint8Array(arr32.buffer);
arr32[0] = 255;
console.log(arr8[0], arr8[1], arr8[2], arr8[3]);
私はChromeのコンソールでこれを実行すると、、それは私のマシンがリトルエンディアンであることを示す、255 0 0 0
が得られます。しかし、 、あなたのマシンはビッグエンディアンである場合は、代わりに0 0 0 255
が表示される場合がありますので。
ECMAスクリプトは、実際には整数型の概念を持たないが、それは暗黙的にまたは浮動小数点値を、必要に応じて倍精度から強制された(示さ数が多すぎる場合、またはそれが小数成分を有する場合)。
多くの主流のJavaScriptインタプリタは(SpiderMonkeyのは一例です)実装にショートカットを取り、各命令の値の実際のネイティブな型をチェック避けるために倍増すると、すべての数値を解釈します。実施ハックの結果として、ビット操作は二重表現にバックキャスト続いて一体型にキャストとして実装されています。 JavaScriptでビットレベルの操作を使用することは良い考えではないですし、とにかくパフォーマンスの向上を得ることはありません。
整数のビット単位のシフトは、JavaScriptで "安全" ですか?
は32ビット(31 +記号)内に収まる整数の。 、と言うとは異なり、Pythonは、あなたが1 << 40を得ることができません。
このは、JavaScriptの数字は実際に浮いていても、ビット演算子がECMA-262で動作するように規定されている方法です。 (技術的には、倍精度浮動小数点数、あなたの32ビット整数の範囲をカバーするのに十分に簡単仮数の52ビットを与える。)
ビット単位の演算に関わる「エンディアン」の問題はない、とエンディアンが関与している可能性なしバイトのストレージフォーマットではJavaScriptに組み込まれていません。
JavaScriptは、整数型、浮動小数点のみのタイプを持っていません。あなたはこのことを心配して、実装の詳細に十分に近づくことはできません。