174 votes

Y at-il "0b" ou quelque chose de similaire pour représenter un nombre binaire en Javascript

Je sais que 0x est un préfixe pour les nombres hexadécimaux en Javascript. Par exemple, 0xFF représente le nombre 255.

Y a-t-il quelque chose de similaire pour les nombres binaires? Je m'attendrais à ce que 0b1111 représente le nombre 15 , mais cela ne fonctionne pas pour moi.

240voto

LukeH Points 110965

Non, il n'y a pas d'équivalent pour les nombres binaires. JavaScript ne prend en charge que les littéraux numériques aux formats décimal (sans préfixe), hexadécimal (préfixe 0x ) et octal (préfixe 0 ).

Une alternative possible est de passer une chaîne binaire à la méthode parseInt avec la base:

 var foo = parseInt('1111', 2);    // foo will be set to 15
 

35voto

urish Points 1969

Dans ECMASCript 6, cela sera pris en charge en tant que partie du langage, c'est-à-dire que 0b1111 === 15 est vrai. Vous pouvez également utiliser une lettre majuscule B (par exemple 0B1111 ).

Recherchez BinaryIntegerLiteral dans le brouillon des spécifications de l' ES6 .

25voto

Juan Garcia Points 81

Je sais que les gens disent que l’extension des prototypes n’est pas une bonne idée, mais votre scénario vous appartient…

Je le fais de cette façon:

 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
 

24voto

Pops Points 10137

Si votre préoccupation principale est l'affichage plutôt que le codage, il existe un système de conversion intégré que vous pouvez utiliser:

 var num = 255;
document.writeln(num.toString(16)); // Outputs: "ff"
document.writeln(num.toString(8)); // Outputs: "377"
document.writeln(num.toString(2)); // Outputs: "11111111"
 

Ref: Référence du numéro JavaScript

10voto

frodeborli Points 275

Autant que je sache, il n'est pas possible d'utiliser un binaire denoter en Javascript. J'ai trois solutions pour vous, qui ont toutes leurs questions. Je pense que la variante 3 est le plus "beau" pour des raisons de lisibilité, et c'est peut-être beaucoup plus vite que le reste - à l'exception de son premier moment de l'exécution de coût. Le problème est qu'il prend en charge uniquement les valeurs jusqu'à 255.

Solution 1: "00001111".b()

String.prototype.b = function() { return parseInt(this,2); }

Variante 2: b("00001111")

function b(i) { if(typeof i=='string') return parseInt(i,2); throw "Expects string"; }

Variante 3: b00001111

Cette version vous permet de vous tapez 8 chiffres binaires b00000000, le chiffre 4 b0000 et variable chiffres b0. C'est - b01 est illégal, vous devez utiliser b0001 ou 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;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X