0
votes

Longueur de bitset retour 0

J'utilise un bitset pour représenter une série de données temporelle de données. Par exemple, le premier bit représente la première jour 1, le deuxième bit représente la journée 2, etc.

Je suis confus lorsque j'exécute le code suivant car il retourne toujours la longueur de 0: xxx

Après avoir joué autour, je vois que c'est parce que les valeurs sont toutes fausses. Je fixe le peu à zéro pour que je suppose que cela compterait dans la longueur et j'en ai besoin pour compter. Y a-t-il un moyen d'obtenir le compte, y compris faux et vrai?


3 commentaires

Très similaire à Cette question


Lire la documentation , c'est-à-dire le Javadoc de longueur () : "renvoie la" taille logique "de ce bitset: l'index du bit de jeu le plus élevé dans le bitset plus un. < B> retourne zéro si le bitset ne contient pas de bits de jeu . "


En fait, pourquoi avez-vous besoin de cela?


4 Réponses :


1
votes

Classe Bitset a un constructeur avec le nombre souhaité de bits .

crée un bit défini dont la taille initiale est suffisamment grande pour explicitement représentent des bits avec des indices dans la plage 0 à NBITS-1. Tous les bits sont initialement faux.

Bitset .Size ()

retourne le nombre de bits d'espace réellement utilisé par ce bitset à représenter des valeurs de bit. L'élément maximum de l'ensemble est la taille - 1er élément.

Bitset .Cardinalité

retourne le nombre de bits définis sur true dans ce bitset.

Bitset est un jeu de bits compacté, il semble que ce ne soit pas votre besoin car vous devez connaître le nombre de bits définis sur true ou false.

Ma proposition: xxx

Ce programme écho 100, 3 fois.


1 commentaires

Merci pour la réponse, j'ai examiné ces deux méthodes et ils ne retournent pas le nombre de bits que j'ai définis. Taille () retournera 128 dans mon exemple et la cardinalité retournera 0 car aucun bits n'est défini. Je cherche à avoir combien de bits je me suis mis à faux ou vrai. Donc, dans mon exemple, je cherche à retourner 100.



0
votes

Ce n'est pas possible en utilisant uniquement Bitset - J'ai examiné la mise en œuvre, et cela ne stocke tout simplement pas ce que vous voulez. Je ne peux que signaler seulement des solutions que vous avez probablement déjà à l'esprit:

1) Gardez la trace de la longueur de la longueur

2) Utilisez Bitset de la bibliothèque (j'ai trouvé Ceci: HTTPS : //www.iro.umontreal.ca/~simul/ssj-2/doc/iro/lecuyer/util/bitvector.html )

3) étendre Bitset (comme indiqué dans des commentaires, pas la meilleure idée): xxx


6 commentaires

Vous avez manqué une douzaine de surcharges pour # 3.


Je pense que Set (int defindex, intinindex) et Effacer (int defindex, int toindex) .


Non, il y a 3 clair () surcharges et 4 SET () surcharge et flip () et et () et ou () etc. Et qui a pour savoir ce qu'ils vont ajouter dans la prochaine version. C'est une utilisation abusive classique d'héritage.


Ces Set appellent ce définir , alors c'est bien. Pour les autres - accepté, vous devriez les remplacer aussi.


Point équitable. Mais c'est un détail de mise en œuvre. Il n'y a aucune garantie une autre mise en œuvre (parallèle ou future) fera de même.


Je vois, accepté. Et oui, la délégation serait meilleure.



0
votes

Il ne semble pas contenir de méthode de ce que vous attendez.

La longueur retourne la taille du bitset pour la dernière valeur "vraie" ... Donc: P>

false, false, false, true, false, false


0 commentaires

0
votes

Question:

Y a-t-il un moyen d'obtenir le compte, y compris faux et vrai?

Réponse:

Non, pas de Bitset , non fiable! ..vous pouvez émettre bitset.size () , qui vous donnera:

Le nombre de bits actuellement dans cet ensemble de bits

mais taille () (valeur) ne changera pas, aussi longtemps que vous le faites bitset.set (i, false) resp. bitset.clear (i) ..for n'importe quel i .

... seulement lorsque i> = Taille () et bitset.set (i / *, true * /) , il aura effet sur (la valeur de) taille () .


Et même si vous faites: xxx

(initialisez votre bit défini avec "Taille non par défaut"), il est garanti que Bs.S.SIZE ( )> = NBITS , mais pas bs.Size () == NBITS .


0 commentaires