私はそれ0xがJavascriptの16進数のプレフィックスであることを知っています。たとえば、0xFF255を表します。
2進数に似たものはありますか?0b1111数を表すことを期待します15が、これは私にはうまくいきません。
0b0111_0_1_0_1。
私はそれ0xがJavascriptの16進数のプレフィックスであることを知っています。たとえば、0xFF255を表します。
2進数に似たものはありますか?0b1111数を表すことを期待します15が、これは私にはうまくいきません。
0b0111_0_1_0_1。
回答:
更新:
JavaScriptの新しいバージョン(特にECMAScript 6 0b)では、2進数(prefix )、8進数(prefix 0o)、16進数(prefix 0x:)の数値リテラルのサポートが追加されています。
var bin = 0b1111; // bin will be set to 15
var oct = 0o17; // oct will be set to 15
var oxx = 017; // oxx will be set to 15
var hex = 0xF; // hex will be set to 15
// note: bB oO xX are all valid
この機能は、FirefoxとChromeですでに利用可能です。現在IEではサポートされていませんが、Spartanが到着したときにサポートされる予定です。
(おかげセミコロンのコメントとurishの答え、このうちを指し示します。)
元の回答:
いいえ、2進数に相当するものはありません。JavaScriptは、10進数(接頭辞なし)、16進数(接頭辞0x)および8進数(接頭辞0)形式の数値リテラルのみをサポートしています。
可能な代替策の1つは、バイナリ文字列をparseInt基数とともにメソッドに渡すことです。
var foo = parseInt('1111', 2); // foo will be set to 15
0bサポートされている言語はほとんどありません。
int typenor はありませんinteger type。したがって、すべての整数は浮動小数点数として格納されます。
プロトタイプを拡張するのは良い考えではないと人々が言っていることは知っていますが、それはあなたの脚本でした...
私はこのようにします:
Object.defineProperty(Number.prototype, 'b', {set:function(){return false;},get:function(){return parseInt(this, 2);}});
100..b // returns 4
11111111..b // returns 511
10..b+1 // returns 3
// and so on
ParseInt("101", 2)実際の答えになる可能性があることに注意してください!
コーディングではなく表示が主な関心事である場合は、組み込みの変換システムを使用できます。
var num = 255;
document.writeln(num.toString(16)); // Outputs: "ff"
document.writeln(num.toString(8)); // Outputs: "377"
document.writeln(num.toString(2)); // Outputs: "11111111"
私の知る限り、Javascriptでバイナリの分母を使用することはできません。私には3つの解決策がありますが、すべて問題があります。選択肢3は読みやすさの点で最も「見栄えがいい」と思います。初期の実行時間のコストを除いて、他の3は他のものよりもはるかに高速です。問題は、255までの値のみをサポートすることです。
代替1: "00001111".b()
String.prototype.b = function() { return parseInt(this,2); }
代替2: b("00001111")
function b(i) { if(typeof i=='string') return parseInt(i,2); throw "Expects string"; }
代替3: b00001111
このバージョンでは、8桁の2進数b00000000、4桁b0000、可変桁のいずれかを入力できますb0。これはb01違法です。b0001またはを使用する必要がありb1ます。
String.prototype.lpad = function(padString, length) {
var str = this;
while (str.length < length)
str = padString + str;
return str;
}
for(var i = 0; i < 256; i++)
window['b' + i.toString(2)] = window['b' + i.toString(2).lpad('0', 8)] = window['b' + i.toString(2).lpad('0', 4)] = i;
いいえ。ただし、parseIntを使用して、必要に応じて引用符を省略できます。
parseInt(110, 2); // this is 6
parseInt("110", 2); // this is also 6
引用符を省略した場合の唯一の欠点は、非常に大きな数の場合、オーバーフローが速くなることです。
parseInt(10000000000000000000000, 2); // this gives 1
parseInt("10000000000000000000000", 2); // this gives 4194304
これは実際には質問Q(すでに何度か回答されています)に実際に回答していないことはわかっていますが、あなた(またはこの主題に関心のある他の人)が最も読みやすく、後方/将来/クロスブラウザー互換であるという事実を考慮することをお勧めします方法は、16進数表現を使用することです。
Qの言い回しから、コードでバイナリリテラルを使用することについてのみ話しているように見え、数値のバイナリ表現の処理については話していないと思われます(parstIntを使用する方法です)。
0-Fから0000-1111へのマッピングに精通していない2進数を処理する必要のあるプログラマーはたくさんいると思います。したがって、基本的には4つのグループを作成し、16進表記を使用します。
したがって、101000000010と書く代わりに、まったく同じ意味で0xA02を使用します。これは、はるかに読みやすく、エラーが発生する可能性が低くなります。
読みやすさを考慮して、どちらが大きい
かを比較してみてください:10001000000010010または1001000000010010
そして、私が次のようにそれらを書くとどうなるでしょう:
0x11012または0x9012
// Conversion function
function bin(nb)
{
return parseInt(nb.toString(2));
}
// Test
var stop = false;
while(!stop)
{
var n = parseInt(prompt("Type a decimal number : "));
alert(bin(n));
var str = prompt("Retry ? Y / N");
if(str === "N") { stop = true; }
}