Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- NzBitset<> bitset1("00110010");
- NzBitset<> bitset2("1100");
- NzBitset<> bitset3;
- // On peut effectuer des opérations sur deux bitsets de taille différente
- bitset2 ^= bitset1; // 0011 1110
- // Le test d'égalité ne vérifie que les bits activés, ainsi deux bitsets n'ont pas besoin d'avoir la même taille pour être équivalents
- // de la même façon que (uint8) 00001100 == (uint16) 00000000 00001100
- bitset2 == NzBitset<>("111110") // true
- // Il existe aussi des méthodes permettant d'agir comme si le bitset n'avait pas de limite de taille:
- bitset2.Set(10, true); // assert failed
- bitset2.UnboundedSet(10, true); // 100 0011 1110
- bitset2.UnboundedTest(42); // false (les bits en dehors du bitset sont considérés comme ayant une valeur de 0)
- // Opérations élémentaires
- bitset2.Count(); // 6 bits activés
- bitset2.FindFirst(); // 1 (indice du premier bit activé)
- bitset2.FindNext(5); // 10 (indice du premier bit activé à partir du bit X)
- // Une boucle for sur les bits activés ressemble donc à
- // for (unsigned int i = bitset2.FindFirst(); i != bitset2.npos; i = bitset2.FindNext(i))
- // Et pour finir, des méthodes permettant d'éviter les allocations dynamiques inutiles
- // Cet opérateur va former un bitset temporaire, allouant la place requise pour stocker le résultat avant de le déplacer dans bitset3
- bitset3 = bitset1 & bitset2; // 000 0011 0010
- // Cette méthode va directement stocker le résultat dans bitset3, et n'allouer que si bitset3 n'est pas assez grand pour le résultat
- bitset3.PerformsAND(bitset1, bitset2);
- // À noter que le receveur peut être envoyé comme argument sans problème
- bitset3.PerformsXOR(bitset3, bitset3); // 000 0000 0000
- bitset3.TestNone(); // true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement