[解決済み】JavaScriptで整数を2進数に変換する方法は?
質問
正負の整数を2進数で表示したい。
むしろ この質問 ただし、JavaScriptの場合。
どのように解決するのですか?
これは developer.mozilla.org(MDN) にあるものですが、A)フォーマットとB)数値が範囲内であることをチェックするためにいくつかの行を追加しています。
いくつかの提案
x.toString(2)
というのは、マイナス記号がつくだけで、うまくいきません。
フェルナンドは、シンプルな解決法として
(x>>>0).toString(2);
これは負の値に対しては問題ないのですが、xが正の値のときにちょっとした問題があります。これは出力が1から始まるもので、正の数では適切な2S補数ではありません。
正の数が0から始まり、負の数が1から始まるという2s補数の事実を理解していない人は、このSO QnA on 2s補数をチェックしてみてください。 2の補数」とは何ですか?
解決策としては、正の数には0を前置することで、この解答の以前の改訂版で行いました。また、33ビットの数値を受け入れることもできますし、変換する数値が -(2^31)<=x<2^31-1 の範囲内であることを確認することもできます。つまり、常に32ビットの数値になるわけです。 しかし、そのようなことをするよりも、mozilla.orgにあるこの解決策を使うことができます。
Patrickの回答とコードは長く、どうやら64ビットで動作するようですが、コメントした人が見つけたバグがあり、コメントした人がpatrickのバグを修正したのですが、patrickは自分のコードにコメントしなかったし忘れてしまった魔法の数字quot"を持っていて、もはやpatrick自身のコード/なぜそれが動作するかを完全に理解できていないようです。
Annanは、いくつかの不正確で不明瞭な用語がありましたが、developer.mozilla.orgによる解決策に言及しました。
注:旧リンク https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators しかし、archive.org がページを検索したときに表示される、適切な古いリンクは、ここで利用可能です。 https://web.archive.org/web/20150315015832/https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators
この解決策は、32ビット数に対して有効です。
コードは3行の関数と、かなりコンパクトです。
しかし、私は8ビットのグループで出力をフォーマットするために正規表現を追加しました。ベースとなるのは JavaScriptでカンマを桁区切りにした数値を表示する方法 (でグループ化していたのを修正しただけです)。 3s を右から左へ追加し カンマ でグループ化すること。 8s を右から左へ、そして スペース )
また、モジラはnMask(入力される数値)のサイズについて、範囲内でなければならないというコメントを出していますが、範囲外の数値のテストやエラーは出していませんので、それを追加しています。
なぜパラメータに'nMask'という名前をつけたのかよくわからないが、そのままにしておくことにする。
function createBinaryString(nMask) {
// nMask must be between -2147483648 and 2147483647
if (nMask > 2**31-1)
throw "number too large. number shouldn't be > 2**31-1"; //added
if (nMask < -1*(2**31))
throw "number too far negative, number shouldn't be < 2**31" //added
for (var nFlag = 0, nShifted = nMask, sMask = ''; nFlag < 32;
nFlag++, sMask += String(nShifted >>> 31), nShifted <<= 1);
sMask=sMask.replace(/\B(?=(.{8})+(?!.))/g, " ") // added
return sMask;
}
console.log(createBinaryString(-1)) // "11111111 11111111 11111111 11111111"
console.log(createBinaryString(1024)) // "00000000 00000000 00000100 00000000"
console.log(createBinaryString(-2)) // "11111111 11111111 11111111 11111110"
console.log(createBinaryString(-1024)) // "11111111 11111111 11111100 00000000"
関連
-
[解決済み] jQueryで、ユーザーがそのフィールドを編集している間、テキストフィールドの最初の文字を大文字にするにはどうすればよいですか?
-
[解決済み】このオブジェクトの "forEach "はなぜ関数でないのですか?
-
[解決済み】'useState' が定義されていない no-undef React
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] Uncaught TypeError: nullのプロパティ 'appendChild' を読み取ることができない。
-
[解決済み】Javascript - ERR_CONTENT_LENGTH_MISMATCH
-
[解決済み】JS ファイルが net::ERR_ABORTED 404 (Not Found) を取得する)
-
[解決済み】WebSocket接続に失敗しました。WebSocket のハンドシェイク中にエラーが発生しました。予期しない応答コードです。400
-
[解決済み】Uncaught TypeError: 未定義のプロパティ 'msie' を読み取れない - jQuery tools
-
[解決済み】未定義のプロパティ 'forEach' を読み取ることができない
-
[解決済み] JavaScriptでカンマを桁区切りにして数値を表示する方法
-
[解決済み] 2の補数 "とは何ですか?
-
[解決済み】JavaScriptには組み込みのstringbuilderクラスがあるのか?
-
[解決済み] JavaScriptの>>演算子とは何ですか、どのように使うのですか?