SlideServe
Menu
Préférences
© SlideServe · v2026

Main Index

lok avatar
10 diapositives · 299 Views · Sep 18, 2014

Lecture 7 – bitset. 1. Main Index. Contents. Bitset model : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 member[0] member[1] 操作: vectorIndex: 位 i 对应的 vector 下标;. 1 1 1 1 1 1 1 1. 1 1 1 1 1 1 1 1. 2. Main Index. Contents. Implementing the bitVector Class.

Main Index - slide 1
01 / 10Main Index
1 / 17

Télécharger la présentation

Main Index
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  1. Lecture 7 – bitset 1 Main Index Contents • Bitset model: • 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 • member[0] member[1] • 操作:vectorIndex: 位i 对应的vector下标; 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  2. 2 Main Index Contents Implementing the bitVector Class • bitMask() returns an unsigned character value containing a 1 in the bit position representing i.

  3. Bitvector class bitVector { public: bitVector(int numBits = 16); bitVector(int b[], int n); bitVector& operator= (int v); bitVector& operator= (char c); int size() const; int bit(int i) const; void set(int i); void clear(int i); void clear(); bitVector operator~ (); void write(fstream& ostr); void read(fstream& istr, int numBits); friend ostream& operator<< (ostream& ostr, const bitVector& x);

  4. Bitvector private: int numberOfBits; int vectorSize; vector<unsigned char> member; int vectorIndex(int i) const; unsigned char bitMask(int i) const; };

  5. Bitvector int bitVector::vectorIndex(int i) const { return i >> 3; //i 右移3位,相当与除8 } unsigned char bitVector::bitMask(int i) const { return 1 << (7 - (i & 7)); //掩码,可置位和清零 } //1左移0-7位 //余数为0则最左边的位置1,余7则最右边的位置1 bitVector::bitVector(int numBits): numberOfBits(numBits) { vectorSize = (numberOfBits+7) >> 3; member.resize(vectorSize); }

  6. Bitvector bitVector operator| (const bitVector& x, const bitVector& y) { int i; if (x.numberOfBits != y.numberOfBits) throw rangeError("bitVector |: bit vectors are not the same size"); bitVector tmp(x.numberOfBits); for (i = 0; i < x.vectorSize; i++) tmp.member[i] = x.member[i] | y.member[i]; return tmp; }

  7. Bitvector bitVector bitVector::operator~ () { bitVector tmp(numberOfBits); for (int i = 0; i < vectorSize; i++) tmp.member[i] = ~member[i]; return tmp; }

  8. Bitvector int bitVector::bit(int i) const //返回第i位的值 { if (i < 0 || i >= numberOfBits) throw indexRangeError( "bitVector bit(): bit out of range", i, numberOfBits); if ((member[vectorIndex(i)] & bitMask(i)) != 0) return 1; else return 0; }

  9. Bitvector void bitVector::set(int i) { if (i < 0 || i >= numberOfBits) throw indexRangeError( "bitVector set(): bit out of range", i, numberOfBits); member[vectorIndex(i)] |= bitMask(i); }

  10. Bitvector void bitVector::clear(int i) { if (i < 0 || i >= numberOfBits) throw indexRangeError( "bitVector clear(): bit out of range", i, numberOfBits); member[vectorIndex(i)] &= ~bitMask(i); }