2017-10-11 16 views
0

Je suis en train de faire une comparaison entre deux chiffres, mais je veux seulement que le bit n-ième de l'un des nombres soit égale à une certaine valeur binaireComparer seulement des bits spécifiques d'un certain nombre

ex: assert (5 == 0b1XX) == vrai puisque 5 est 0b101 et le 3ème MSB est 1

Y at-il de toute façon je peux utiliser un ne pas faire attention (javascript?

+0

Recherche d'opérateurs bitwise – litelite

+2

Oui, vous cherchez '(5 & 0b100)! == 0 – georg

+0

Malheureusement, cela ne fonctionne pas parce que j'utilise une fonction que quelqu'un d'autre a écrit et il ne me permet pas de manipuler la var à comparer. Comme je l'ai dit, la seule chose qui pourrait fonctionner est un «s'en fout». –

Répondre

1

Utilisez SHIFT bitwise >> avec ET bitwise & pour y parvenir.

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

>> va décaler les bits vers la droite et jeter les morceaux décalés.

& renvoie un 1 lorsque les bits correspondants sont tous les deux 1.

Here is the MDN page on bitwise operators.

Voici une fonction que vous pouvez utiliser pour toute valeur dans toutes les positions:

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

@hermbit est juste. Je vais essayer de l'expliquer aussi.

Vous pouvez décaler la représentation binaire d'un nombre à l'aide de l'opérateur >>.

Donc, si vous avez le numéro 5 0b101 et vous passez ce deux endroits que vous obtenez 0b001 (enlevé deux dernières places et le côté comblee gauche avec 0s.

Ensuite, vous pouvez utiliser le & pour faire une logique et à la fois numéros. dans ce cas

0b001 & 0b001 est égal à 0b001, car elle retourne un numéro où les bits seront 1 seulement dans les endroits où les deux numéros sont 1.

J'espère que cela clarifie les choses.