Ich schreibe einen einfachen IP-Rechner und benötige eine bestimmte Funktion in JavaScript, um die ich mich nicht kümmern kann.

Basierend auf einer Dezimalzahl würde eine Zahl mit einer Anzahl von Bits erzeugt, die dieser Zahl entspricht.

Zum Beispiel würde Nummer 3 0000 0111 erzeugen, Nummer 7 würde 0111 1111 erzeugen usw.

0
Wezu 18 Jän. 2019 im 16:25

3 Antworten

Beste Antwort

Sie können auch folgenden Code verwenden:

function createSequence( ones, total ) {
  var result = (2**total + 2**ones - 1).toString(2).slice(1);
  console.log(result)
  return result;
}

createSequence( 3, 8 );
createSequence( 7, 8 )

Erläuterung:

Die binäre Darstellung von 2**total ist 1 und total mal 0 (für total=8 100000000)

Die binäre Darstellung von 2**ones - 1 wird 1 Mal ones wiederholt (für ones=3 111).

Wenn Sie diese Zahlen addieren, müssen Sie die führende 1 entfernen

Hinweis: Wenn Ihr Browser den Operator ** nicht unterstützt, können Sie Bitverschiebungen verwenden:

function createSequence( ones, total ) {
  var result = ((1<<total) + (1<<ones) - 1).toString(2).slice(1);
  console.log(result)
  return result;
}

createSequence( 3, 8 );
createSequence( 7, 8 )
1
barbsan 18 Jän. 2019 im 14:16

Pseudocode:

    NumberToBits(int x) {
    var answer = 2^x;
    if(x > 1)
        return answer + NumberToBits(x-1);
    }
0
dgknca 18 Jän. 2019 im 13:48