Wie konvertiere ich eine Ganzzahl in JavaScript in eine Binärzahl?

299

Ich würde gerne positive oder negative Ganzzahlen in Binärform sehen.

Eher wie diese Frage , aber für JavaScript.

Barlop
quelle
2
Die a.toString (2) Beispiele scheinen nicht für -1
barlop
1
Es ist auch möglich, von binär zu dezimal zu konvertieren: stackoverflow.com/questions/11103487/…
Anderson Green
Und wenn ich "binär" sagte, kann das ein bisschen mehrdeutig sein. Ich meine die interne Bitstring-Darstellung, die ein 2s-Komplement ist, also wären positive Zahlen in Basis 2 und mit einer führenden 0 (und negative Zahlen würden nicht mit einem Minus-Symbol oder einer Vorzeichengrößen-Darstellung geschrieben, sondern als Funktion ihres positiven Äquivalents)
Barlop

Antworten:

498
function dec2bin(dec){
    return (dec >>> 0).toString(2);
}

dec2bin(1);    // 1
dec2bin(-1);   // 11111111111111111111111111111111
dec2bin(256);  // 100000000
dec2bin(-256); // 11111111111111111111111100000000

Sie können die Number.toString(2)Funktion verwenden, sie hat jedoch einige Probleme bei der Darstellung negativer Zahlen. Zum Beispiel ist die (-1).toString(2)Ausgabe "-1".

Um dieses Problem zu beheben, können Sie den vorzeichenlosen bitweisen Operator ( >>>) für die Rechtsverschiebung ( ) verwenden, um Ihre Zahl in eine vorzeichenlose Ganzzahl zu zwingen.

Wenn Sie ausführen (-1 >>> 0).toString(2), verschieben Sie Ihre Zahl 0-Bits nach rechts, wodurch die Zahl selbst nicht geändert wird, sondern als vorzeichenlose Ganzzahl dargestellt wird. Der obige Code wird "11111111111111111111111111111111"korrekt ausgegeben .

Diese Frage hat weitere Erklärungen.

-3 >>> 0 (rechte logische Verschiebung) erzwingt seine Argumente zu vorzeichenlosen Ganzzahlen, weshalb Sie die Komplementdarstellung der 32-Bit-Zwei von -3 erhalten.

fernandosavio
quelle
7
Hier ist die Erklärung
fernandosavio
Es ist schon eine Weile her, dass ich Javascript ausprobiert habe, aber ich habe es hier versucht. w3schools.com/js/tryit.asp?filename=tryjs_output_alert mit diesem <script> window.alert ((- 3 >>> 0) .toString (2)); </ script> Ja, es hat funktioniert
Barlop
1
toString (2) funktioniert nicht, da Sie die Eingabe von Text erhalten. Verwenden Sie dies: function decToBase (dec, base) {return parseInt (dec) .toString (base); } alert (decToBase (dec, 2));
Magus
Sie nehmen an, dass die Eingabe Text ist, aber die Funktion in der Antwort erwartet eine Ganzzahl ... Wenn die Eingabe also ein Text ist, konvertieren Sie ihn einfach in eine Ganzzahl. Verwenden Sie die gefälschte Bitverschiebung und fertig
fernandosavio
@ Magus wer bekommt die Eingabe von Text?!
Barlop
207

Versuchen

num.toString(2);

Die 2 ist der Radix und kann eine beliebige Basis zwischen 2 und 36 sein

Quelle hier

AKTUALISIEREN:

Dies funktioniert nur für positive Zahlen. Javascript repräsentiert negative binäre Ganzzahlen in Zweierkomplementnotation. Ich habe diese kleine Funktion gemacht, die den Trick machen sollte, ich habe sie nicht richtig getestet:

function dec2Bin(dec)
{
    if(dec >= 0) {
        return dec.toString(2);
    }
    else {
        /* Here you could represent the number in 2s compliment but this is not what 
           JS uses as its not sure how many bits are in your number range. There are 
           some suggestions /programming/10936600/javascript-decimal-to-binary-64-bit 
        */
        return (~dec).toString(2);
    }
}

Ich hatte Hilfe von hier

Manatok
quelle
funktioniert nicht für -1. a = -1; document.write (Number (a.toString (2))); zeigt -1
Barlop
Das Update scheint immer noch nicht für negative Zahlen ( -3Retouren 1) zu funktionieren . Auch ich glaube dec > 0sollte sein dec >= 0, was mindestens 0 beheben sollte. Weil dec2Bin(0)zurück 10.
Adam Merrifield
Beide Fälle in den obigen Kommentaren geben das korrekte Ergebnis in meiner Chrome-Konsole zurück - var a = -1; a.toString (2); "-1" var a = -3; a.toString (2); "-11"
Anmol Saraf
@AnmolSaraf Ich verstehe, was du meinst, und während umgangssprachlich, wenn Leute sagen, was -5 in Dezimalzahl ist, und die Antwort -5 ist. Wenn es um negative Zahlen in Binärform geht, könnte man in gewissem Sinne ein Minuszeichen setzen, also ist 5 101 und -5 sind -101, aber da Computer keine Minuszeichen speichern, stellen sie nur Einsen und Nullen dar. Wenn wir also negative Zahlen in Binärform sagen, meinen wir wirklich, die negative Zahl (einschließlich Minuszeichen) in Einsen und Nullen zu setzen. Einige Möglichkeiten umfassen 1s-Komplement, 2s-Komplement und 'Vorzeichen und Größe'. -101010101 oder -0101010 ist also nicht das, was Menschen mit einer negativen Zahl in Binärform meinen.
Barlop
Dieser Link kann für einige stackoverflow.com/questions/12337360/… von Interesse sein. Ihre Antwort widerspricht sich selbst. Sie schreiben "Javascript repräsentiert negative binäre Ganzzahlen in Zweierkomplement-Notation." Und Ihr Code sagt: "Hier könnten Sie die Zahl in 2s Kompliment darstellen, aber dies ist nicht das, was JS als [Unsinnsgrund] verwendet." Und Sie geben auch keinen Hinweis.
Barlop
53

Die Binärdatei in 'In Binär konvertieren' kann sich auf drei Hauptsachen beziehen. Das Positionsnummernsystem, die binäre Darstellung im Speicher oder 32-Bit-Bitstrings. (Für 64-Bit-Bitstrings siehe Patrick Roberts 'Antwort )

1. Zahlensystem

(123456).toString(2)konvertiert Zahlen in das Positionszahlensystem der Basis 2 . In diesem System werden negative Zahlen wie in Dezimalzahlen mit Minuszeichen geschrieben.

2. Interne Vertretung

Die interne Darstellung von Zahlen ist ein 64-Bit-Gleitkomma In dieser Antwort werden einige Einschränkungen erläutert . Es gibt keine einfache Möglichkeit , eine Bit-String-Darstellung davon in Javascript zu erstellen oder auf bestimmte Bits zuzugreifen.

3. Masken und bitweise Operatoren

MDN hat eine guten Überblick über die Funktionsweise bitweiser Operatoren. Wichtig:

Bitweise Operatoren behandeln ihre Operanden als eine Folge von 32 Bits (Nullen und Einsen).

Bevor Operationen angewendet werden, werden die 64-Bit-Gleitkommazahlen in 32-Bit-Ganzzahlen mit Vorzeichen umgewandelt. Nachdem sie zurück konvertiert wurden.

Hier ist der MDN-Beispielcode zum Konvertieren von Zahlen in 32-Bit-Zeichenfolgen.

function createBinaryString (nMask) {
  // nMask must be between -2147483648 and 2147483647
  for (var nFlag = 0, nShifted = nMask, sMask = ""; nFlag < 32;
       nFlag++, sMask += String(nShifted >>> 31), nShifted <<= 1);
  return sMask;
}

createBinaryString(0) //-> "00000000000000000000000000000000"
createBinaryString(123) //-> "00000000000000000000000001111011"
createBinaryString(-1) //-> "11111111111111111111111111111111"
createBinaryString(-1123456) //-> "11111111111011101101101110000000"
createBinaryString(0x7fffffff) //-> "01111111111111111111111111111111"
AnnanFay
quelle
Was ist der Vorteil dieser Funktion anstelle einer einfachen Zahl (num) .toString (2)?
Magus
5
@Magus Ich denke, ich erkläre die Unterschiede zwischen Ziffern und binären Zeichenfolgen angemessen. Eine 32-Bit-Binärzeichenfolge besteht immer aus 32 Zeichen und besteht aus "1" und "0". toString gibt eine tatsächliche Zahl zurück, die unter Verwendung der Positionsnummernsysteme mit der angegebenen Basis dargestellt wird. Es hängt davon ab, warum Sie die Zeichenfolge möchten, sie haben sehr unterschiedliche Bedeutungen.
AnnanFay
Entschuldigung, du hast recht. Ich sprang direkt zum Code.
Magus
1
Hatte ein Problem mit führenden Nullen bei Verwendung der anderen veröffentlichten Methoden (speziell bei dieser Nummer 536870912 werden die beiden führenden Nullen entfernt), aber diese Lösung hat es korrekt behandelt.
UberMouse
@UberMouse Ja, der >>> hat das führende 0s-Problem, ich werde dieses akzeptieren.
Barlop
43

Ein einfacher Weg ist nur ...

Number(42).toString(2);

// "101010"
ad rees
quelle
24
Ich würde es vorziehen(42).toString(2)
Willem D'Haeseleer
33
Oder noch kürzer42..toString(2)
Kapex
9
Die Leute kämpfen damit. Die Antwort ist richtig, da die Eingabe (42) in eine Ganzzahl umgewandelt wird und diese Zeile benötigt wird. Wenn Sie Ihre 'Nummer' aus einer Texteingabe erhalten, funktioniert toString (2) nicht.
Magus
4
@Kapep, Alter, das ist Genie. Woher wusstest du davon?
Pacerier
2
@ BatuG. Mit der Syntax für Zahlen können Sie den Teil nach dem Dezimaltrennzeichen weglassen. Sie können schreiben, 1.was gleich 1.0oder nur ist 1(und in ähnlicher Weise können Sie auch den vorherigen Teil weglassen und .5stattdessen schreiben 0.5). Im Beispiel ist der erste Punkt das Dezimaltrennzeichen, das Teil der Zahl ist, und der zweite Punkt ist der Punktoperator zum Aufrufen der Methode für diese Zahl. Sie müssen zwei Punkte verwenden (oder die Zahl in Klammern setzen) und können nicht einfach schreiben, 42.toString(2)da der Parser den Punkt als Dezimaltrennzeichen sieht und aufgrund eines fehlenden Punktoperators einen Fehler auslöst.
Kapex
30

Diese Antwort versucht, Eingaben mit einem Absolutwert im Bereich von 2147483648 10 (2 31 ) - 9007199254740991 10 (2 53 -1) zu adressieren .


In JavaScript werden Zahlen in einer 64-Bit-Gleitkommadarstellung gespeichert , aber bitweise Operationen zwingen sie zu 32-Bit-Ganzzahlen im Zweierkomplementformat. Daher beschränkt jeder Ansatz, der bitweise Operationen verwendet, den Ausgabebereich auf -2147483648 10 (-2 31 ). - 2147483647 10 (2 31 -1).

Wenn jedoch bitweise Operationen vermieden werden und die 64-Bit-Gleitkommadarstellung nur unter Verwendung mathematischer Operationen erhalten bleibt, können wir jede sichere Ganzzahl zuverlässig in die 64-Bit-Zweierkomplement- Binärnotation konvertieren, indem wir die 53-Bit-Zeichen vorzeichenerweiterern twosComplement:

function toBinary (value) {
  if (!Number.isSafeInteger(value)) {
    throw new TypeError('value must be a safe integer');
  }

  const negative = value < 0;
  const twosComplement = negative ? Number.MAX_SAFE_INTEGER + value + 1 : value;
  const signExtend = negative ? '1' : '0';

  return twosComplement.toString(2).padStart(53, '0').padStart(64, signExtend);
}

function format (value) {
  console.log(value.toString().padStart(64));
  console.log(value.toString(2).padStart(64));
  console.log(toBinary(value));
}

format(8);
format(-8);
format(2**33-1);
format(-(2**33-1));
format(2**53-1);
format(-(2**53-1));
format(2**52);
format(-(2**52));
format(2**52+1);
format(-(2**52+1));
.as-console-wrapper{max-height:100%!important}

Für ältere Browser gibt es Polyfills für die folgenden Funktionen und Werte:

Als zusätzlichen Bonus können Sie jeden Radix (2–36) unterstützen, wenn Sie die Zweierkomplementkonvertierung für negative Zahlen in Ziffern ⌈64 / log 2 (Radix) ⌉ durchführen, indem Sie Folgendes verwenden BigInt:

function toRadix (value, radix) {
  if (!Number.isSafeInteger(value)) {
    throw new TypeError('value must be a safe integer');
  }

  const digits = Math.ceil(64 / Math.log2(radix));
  const twosComplement = value < 0
    ? BigInt(radix) ** BigInt(digits) + BigInt(value)
    : value;

  return twosComplement.toString(radix).padStart(digits, '0');
}

console.log(toRadix(0xcba9876543210, 2));
console.log(toRadix(-0xcba9876543210, 2));
console.log(toRadix(0xcba9876543210, 16));
console.log(toRadix(-0xcba9876543210, 16));
console.log(toRadix(0x1032547698bac, 2));
console.log(toRadix(-0x1032547698bac, 2));
console.log(toRadix(0x1032547698bac, 16));
console.log(toRadix(-0x1032547698bac, 16));
.as-console-wrapper{max-height:100%!important}

Wenn Sie an meiner alten Antwort interessiert sind ArrayBuffer, mit der eine Verbindung zwischen a Float64Arrayund a hergestellt wurde Uint16Array, lesen Sie bitte den Revisionsverlauf dieser Antwort .

Patrick Roberts
quelle
Danke, es ist gut, dass dies für 64-Bit funktioniert. Können Sie mir irgendwelche Vorteile dieser Antwort gegenüber Annans Antwort mitteilen?
Barlop
2
Viel größere Reichweite? Es funktioniert, um Annans Antwort zu mögen -(2**53)-1, 2**53-1anstatt sie nur -(2**31)zu 2**31-1mögen.
Patrick Roberts
Ja, das ist ein großer Vorteil, das verstehe ich, und das reicht aus, obwohl es ein bisschen mehr Code ist, aber ich meinte, ich bin neugierig, ob es noch andere Vorteile gibt?
Barlop
1
Ab 2 ** 32 + 1 wird das letzte (ganz rechts) Bit gelöscht, wenn es gesetzt werden soll.
Lovro
1
Funktioniert, wenn die Zeile lautet: var exponent = ((uint16 [3] & 0x7FF0) >> 4) - 1023 + 1;
Lovro
15

Eine Lösung, mit der ich mich für 32-Bit entscheiden würde, ist der Code am Ende dieser Antwort, der von developer.mozilla.org (MDN) stammt, aber mit einigen Zeilen für A) Formatierung und B) Überprüfung der Nummer ist in Reichweite.

Einige schlugen vor, x.toString(2)was für Negative nicht funktioniert, es steckt nur ein Minuszeichen für sie, was nicht gut ist.

Fernando erwähnte eine einfache Lösung, (x>>>0).toString(2);die für Negative in Ordnung ist, aber ein kleines Problem hat, wenn x positiv ist. Der Ausgang beginnt mit 1, was für positive Zahlen kein richtiges 2s-Komplement ist.

Jeder, der die Tatsache von positiven Zahlen, die mit 0 beginnen, und negativen Zahlen mit 1 im 2s-Komplement nicht versteht, könnte diese SO QnA im 2s-Komplement überprüfen. Was ist "2's Complement"?

Eine Lösung könnte darin bestehen, positiven Zahlen eine 0 voranzustellen, was ich in einer früheren Überarbeitung dieser Antwort getan habe. Und man könnte akzeptieren, manchmal eine 33-Bit-Zahl zu haben, oder man könnte sicherstellen, dass die zu konvertierende Zahl innerhalb des Bereichs liegt - (2 ^ 31) <= x <2 ^ 31-1. Die Zahl ist also immer 32 Bit. Aber anstatt das zu tun, können Sie mit dieser Lösung auf mozilla.org gehen

Patricks Antwort und Code sind lang und funktionieren anscheinend für 64-Bit, hatten aber einen Fehler, den ein Kommentator gefunden hat, und der Kommentator hat den Fehler von Patrick behoben, aber Patrick hat eine "magische Zahl" in seinem Code, die er nicht kommentiert hat und hat vergessen und Patrick versteht seinen eigenen Code nicht mehr vollständig / warum er funktioniert.

Annan hatte eine falsche und unklare Terminologie, erwähnte jedoch eine Lösung von developer.mozilla.org https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators Dies funktioniert für 32-Bit-Zahlen.

Der Code ist ziemlich kompakt, eine Funktion von drei Zeilen.

Aber ich habe einen regulären Ausdruck hinzugefügt, um die Ausgabe in Gruppen von 8 Bit zu formatieren. Basierend auf dem Drucken einer Zahl mit Kommas als Tausendertrennzeichen in JavaScript (Ich habe sie gerade geändert, indem ich sie in 3 Sekunden von rechts nach links gruppiert und Kommas hinzugefügt habe , in 8 Sekunden von rechts nach links gruppiert und Leerzeichen hinzugefügt habe ).

Und während Mozilla einen Kommentar zur Größe von nMask (der eingegebenen Nummer) abgegeben hat, dass sie im Bereich liegen muss, haben sie keinen Fehler getestet oder ausgelöst, wenn die Nummer außerhalb des Bereichs liegt fügte hinzu, dass.

Ich bin mir nicht sicher, warum sie ihren Parameter 'nMask' genannt haben, aber ich werde das so lassen, wie es ist.

Referenz: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators

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"

Barlop
quelle
8

Sie können Ihre eigene Funktion schreiben, die ein Array von Bits zurückgibt. Beispiel zum Konvertieren von Zahlen in Bits

Teiler | Dividende | Bits / Rest

2 | 9 | 1

2 | 4 | 0

2 | 2 | 0

~ | 1 | ~

Beispiel der obigen Zeile: 2 * 4 = 8 und der Rest ist 1, also 9 = 1 0 0 1

function numToBit(num){
    var number = num
    var result = []
    while(number >= 1 ){
        result.unshift(Math.floor(number%2))
        number = number/2
    }
    return result
}

Reste von unten nach oben lesen. Ziffer 1 in der Mitte nach oben.

supritshah1289
quelle
1
Übrigens, warum machst du Math.floor(number%2)statt number = Math.floor(number/2)?
Pacerier
1
Der Grund ist, dass Nummer% 2 nicht gleich Nummer / 2 ist. Wir interessieren uns für Rest nicht Quotient.
Supritshah1289
0

Ich habe einen anderen Ansatz gewählt, um etwas zu finden, das dies tut. Ich habe beschlossen, diesen Code nicht in meinem Projekt zu verwenden, aber ich dachte, ich würde ihn an einem relevanten Ort belassen, falls er für jemanden nützlich ist.

  • Verwendet keine Bitverschiebung oder Zweierkomplement-Zwang.
  • Sie wählen die Anzahl der ausgegebenen Bits (es wird nach gültigen Werten von '8', '16', '32' gesucht, aber ich nehme an, Sie könnten das ändern)
  • Sie wählen, ob Sie es als vorzeichenbehaftete oder vorzeichenlose Ganzzahl behandeln möchten.
  • Angesichts der Kombination aus vorzeichenbehafteten / vorzeichenlosen und Anzahl der Bits wird nach Bereichsproblemen gesucht. Sie sollten jedoch die Fehlerbehandlung verbessern.
  • Es hat auch die "umgekehrte" Version der Funktion, die die Bits zurück in das int konvertiert. Sie werden das brauchen, da es wahrscheinlich nichts anderes gibt, das diese Ausgabe interpretiert: D.

function intToBitString(input, size, unsigned) {
	if ([8, 16, 32].indexOf(size) == -1) {
		throw "invalid params";
	}
	var min = unsigned ? 0 : - (2 ** size / 2);
        var limit = unsigned ? 2 ** size : 2 ** size / 2;
	if (!Number.isInteger(input) || input < min || input >= limit) {
		throw "out of range or not an int";
	}
	if (!unsigned) {
		input += limit;
	}
	var binary = input.toString(2).replace(/^-/, '');
	return binary.padStart(size, '0');
}

function bitStringToInt(input, size, unsigned) {
	if ([8, 16, 32].indexOf(size) == -1) {
		throw "invalid params";
	}
	input = parseInt(input, 2);
	if (!unsigned) {
		input -= 2 ** size / 2;
	}
	return input;
}


// EXAMPLES

var res;
console.log("(uint8)10");
res = intToBitString(10, 8, true);
console.log("intToBitString(res, 8, true)");
console.log(res);
console.log("reverse:", bitStringToInt(res, 8, true));
console.log("---");

console.log("(uint8)127");
res = intToBitString(127, 8, true);
console.log("intToBitString(res, 8, true)");
console.log(res);
console.log("reverse:", bitStringToInt(res, 8, true));
console.log("---");

console.log("(int8)127");
res = intToBitString(127, 8, false);
console.log("intToBitString(res, 8, false)");
console.log(res);
console.log("reverse:", bitStringToInt(res, 8, false));
console.log("---");

console.log("(int8)-128");
res = intToBitString(-128, 8, false);
console.log("intToBitString(res, 8, true)");
console.log(res);
console.log("reverse:", bitStringToInt(res, 8, true));
console.log("---");

console.log("(uint16)5000");
res = intToBitString(5000, 16, true);
console.log("intToBitString(res, 16, true)");
console.log(res);
console.log("reverse:", bitStringToInt(res, 16, true));
console.log("---");

console.log("(uint32)5000");
res = intToBitString(5000, 32, true);
console.log("intToBitString(res, 32, true)");
console.log(res);
console.log("reverse:", bitStringToInt(res, 32, true));
console.log("---");

Bremsen
quelle
-1

Noch eine Alternative

const decToBin = dec => {
  let bin = '';
  let f = false;

  while (!f) {
    bin = bin + (dec % 2);    
    dec = Math.trunc(dec / 2);  

    if (dec === 0 ) f = true;
  }

  return bin.split("").reverse().join("");
}

console.log(decToBin(0));
console.log(decToBin(1));
console.log(decToBin(2));
console.log(decToBin(3));
console.log(decToBin(4));
console.log(decToBin(5));
console.log(decToBin(6));
Ivan Proskuryakov
quelle
Bitte beachten Sie Vincents Antwort und den Kommentar dazu, er würde auch für Ihr Posting gelten
barlop
Dies ist, was in einem Kommentar zu seiner Antwort ohne Meinungsverschiedenheit und mit einiger Zustimmung anderer veröffentlicht wurde: "Das kann nützlich sein, um Informatik zu studieren, um zu sehen, wie man es manuell macht, um sich selbst zu unterrichten, aber das ist nicht was ich Ich frage! Wenn Sie das Rad neu erfinden wollen, indem Sie es manuell so machen, dann sollte es zumindest den Vorteil einer erhöhten Effizienz oder einen Vorteil wie eine Vergrößerung der Werte haben, mit denen es fertig werden kann. Ich verstehe nicht jede Diskussion von Ihnen, in der ein solcher Vorteil angegeben wird. "
Barlop
Darüber hinaus schlägt Ihre Lösung vollständig fehl, positive Zahlen beginnen mit einer 1 und
schlagen
Ihre "Antwort" ist also auf vielen Ebenen falsch. Und Sie sollten immer andere Antworten überprüfen, bevor Sie eine Antwort veröffentlichen
barlop
-2

Das ist mein Code:

var x = prompt("enter number", "7");
var i = 0;
var binaryvar = " ";

function add(n) {
    if (n == 0) {
        binaryvar = "0" + binaryvar; 
    }
    else {
        binaryvar = "1" + binaryvar;
    }
}

function binary() {
    while (i < 1) {
        if (x == 1) {
            add(1);
            document.write(binaryvar);
            break;
        }
        else {
            if (x % 2 == 0) {
                x = x / 2;
                add(0);
            }
            else {
                x = (x - 1) / 2;
                add(1);
            }
        }
    }
}

binary();
Vincent William Rodriguez
quelle
3
Das mag nützlich sein, um Informatik zu studieren und zu sehen, wie man es manuell macht, um sich selbst beizubringen, aber das ist nicht das, was ich frage! Wenn Sie das Rad neu erfinden möchten, indem Sie es manuell so ausführen, sollte dies zumindest den Vorteil einer höheren Effizienz oder einen Vorteil wie eine Vergrößerung der Werte haben, mit denen es fertig werden kann. Ich sehe keine Diskussion von Ihnen, die einen solchen Vorteil angibt.
Barlop
-3

Das ist die Lösung. Tatsächlich ist es ganz einfach

function binaries(num1){ 
        var str = num1.toString(2)
        return(console.log('The binary form of ' + num1 + ' is: ' + str))
     }
     binaries(3

)

        /*
         According to MDN, Number.prototype.toString() overrides 
         Object.prototype.toString() with the useful distinction that you can 
         pass in a single integer argument. This argument is an optional radix, 
         numbers 2 to 36 allowed.So in the example above, we’re passing in 2 to 
         get a string representation of the binary for the base 10 number 100, 
         i.e. 1100100.
        */
Brian
quelle
1
Diese Lösung wurde bereits mehrfach vorgeschlagen und funktioniert, wie von OP bereits am 30. März 12 um 9:01 Uhr kommentiert, nicht für negative Zahlen.
Adrian W
@AdrianW Ich schlage vor, dies abzustimmen. Ich merke, dass du nicht hast. Was braucht es dann, um eine Antwort abzustimmen?!
Barlop