Je voudrais d'abord convertir un nombre en binaire, puis inverser le bitwise. Comme ceci:
numéro est 793 = dans JavaScript, je peux faire ce qui suit: p> p> 1100011001 code>
Ensuite, convertissez la valeur binaire en:
0011100110 code> p>
var x = 793;
document.write(x.toString(2)); // gives 0011100110
6 Réponses :
On ne peut pas préciser si vous voulez une chaîne de valeur inversée, si vous pouvez le faire: P> function invert(x){
var e = x.toString(2).split('');
for(var i = 0, l = e.length; i < l; i++) {
e[i] = e[i] === '0' ? '1' : (e[i] === '1' ? '0' : e[i]);
}
return e.join('');
}
invert(793); // '0011100110'
invert(-793); // '-0011100110'
Je ne comprends pas comment cela répond à la question, car Xoring avec 0 fait pas b> change de bits, comme vous l'avez démontré.
@Greg Ah, décollement du cerveau désolé copié les mauvais trucs de ma coquille, allez le réparer
Xor'ing un élément avec 0 ne fait rien
Désolé, manque de sommeil: / mises à jour la réponse.
Vous voulez xor la valeur binaire avec 111111111 - mais plusieurs 1s comme il y a des chiffres dans l'original. Donc:
var x = 793; var result = parseInt(x.toString(2).replace(/[01]/g,function(n) {return 1-n;}),2);
Vous pouvez également enregistrer ceci est une fonction prototype, si vous allez l'utiliser beaucoup: numéro.pototype.negate = fonction () {renvoie cette ^ parseint ((nouveau tableau (this.tostring (2). longueur + 1)). Joindre ("1"), 2);}; code> - De cette façon, vous pouvez avoir
var x = 793; var c = x.negate (); code>
Bon Dieu, tout ce string muning n'est pas très dans l'esprit des opérations bitwises, n'est-ce pas? Vous pouvez aussi le faire comme 793..Tostring (2) .replace (/ 1 / g, 'a'). Remplacez (/ 0 / g, '1'). Remplacez (/ A / g, '0 ') code> mais vous causeriez probablement un 6502 CPU quelque part de fondre.
Vous devez utiliser un masque de bit. ou avec xor p>
La réponse de Moogoo est correcte.
Voici quelques informations sur ce qui se passe ... Permet de supposer qu'il s'agit d'un entier 64 bits. P>
var x = 793; // input value var y = x.toString(2); var yl = y.length; var mask = (Math.pow(2,yl)-1); // calculate mask var result = ~x & mask; document.write(result.toString(2)+"<br/>");
Peu importe, si je me souviens bien de tout ce que JavaScript est 64 bits sous les couvertures. Le résultat que c'est 32 bits ou 64 bits sera la même valeur, peu importe. Je viens d'utiliser 64 bits afin que je puisse démontrer quelle était la valeur négative en binaire. Depuis que le "-" n'existe pas en binaire, mais JavaScript tente d'être gentil quand il montre le signe négatif sur le nombre. Cela a-t-il du sens? Je ne suis pas si génial de l'expliquer. La différence avec la solution que j'ai affichée est que c'est tout mathématique. La pièce Y et YL peut également être simplifiée, je n'ai tout simplement pas le temps d'y arriver
Je viens de faire cela
disons x = -11.3 et c'est un entier 16 bits de quelque part. p>
Mes résultats entreront dans la variable r. P>
var r = ((x & 0x7FFF) ^ 0x7FFF)+1;
Comment -11.3 code> un entier?
Pas le code le plus court mais plus lisible. Ma technique est similaire à @IVo Wetzel :
p>
const bitwiseComplement = (N) => { return N.toString(2).replace(/[0-1]/g, (v) => (v == 1 ? 0 : 1)); }; console.log(bitwiseComplement(793));
Je suppose avec
793 ^ -1 code> Vous obtiendrez la valeur inversée des bits d'un quelconque numéro, utilisez simplement l'opérateur
^ code> avec l'opérande gauche sous forme
-1 code>