2017-10-11 2 views
0

ich einen Vergleich zwischen zwei Zahlen zu tun versuche, aber nur ich will, dass der n-te Bit eines der Zahlen gleich ein bestimmte BinärwertVergleich nur bestimmte Bits einer Zahl

ex sein: assert (5 == 0b1XX) == true seit 5 ist 0b101 und das 3. MSB ist 1

Gibt es sowieso ich kann ein nicht interessieren (X) in Javascript?

+0

Suche nach bitweisen Operatoren – litelite

+2

Ja, du suchst nach '(5 & 0b100)! == 0' – georg

+0

Leider funktioniert das nicht, weil ich eine Funktion verwende, die jemand anders geschrieben hat und die es mir nicht erlaubt zu manipulieren die zu vergleichende Var. Wie gesagt, das einzige, was funktionieren könnte, ist ein "egal". –

Antwort

1

Verwenden bitweise SHIFT>> zusammen mit bitweise UND& dies zu erreichen.

// SHIFT off the first two bits, then check the first bit with AND 
(0b101 >> 2 & 1) === 1 

>> werden Bits nach rechts verschieben und verwerfen Bits weg verschoben.

& wird eine 1 zurückgeben, wenn die entsprechenden Bits beide 1 sind.

Here is the MDN page on bitwise operators.

Hier ist eine Funktion, die Sie für einen beliebigen Wert in jeder Position verwenden können:

// returns true if 'target' has a 'value' at 'position' 
function checkBit(target, position, value) { 
    return (target >> (position - 1) & 1) === value; 
} 
0

@hermbit richtig ist. Ich werde versuchen, es auch zu erklären.

Sie können die Bitdarstellung einer Zahl mit dem Operator >> verschieben.

Also, wenn Sie die Nummer 5 0b101 und Sie es zwei Orte verschieben erhalten Sie 0b001 (removed letzten beiden Plätze und gefugt Seite links mit 0 s.

Dann können Sie die & verwenden, um eine logische und von beiden zu machen in diesem Fall Zahlen.

0b001 & 0b001 gleich 0b001, weil es eine Reihe zurück, wo die Bits 1 nur in den Orten sein, wo beide Zahlen 1 sind.

Ich hoffe, das klärt die Dinge.

Verwandte Themen