Метод, сбрасывающий заданный бит вектор - C (СИ)
Формулировка задачи:
помогите написать последний метод(метод,сбрасывающий заданный бит вектор).Код программы:
Зарание Спасибо
#include "BitVector.h" BitVector::BitVector() { size = 0; n = 0; mask = 1; } BitVector::BitVector(int num_bits) { size = num_bits; n = size/(sizeof(unsigned long) * 8); if (size % (sizeof(unsigned long) * 8) != 0) n++; data = new unsigned long[n]; for (int i = 0; i < n; i++) data[i] = 0; } BitVector::BitVector(const BitVector &v) { size = v.size; n = v.n; data = new unsigned long[n]; for (int i = 0; i < n; i++) data[i] = v.data[i]; } BitVector::~BitVector() { if (size > 0) delete []data; } BitVector& BitVector::operator=(const BitVector &v) { if ( &v == this ) return *this; if (size > 0) delete []data; size = v.size; n = v.n; data = new unsigned long[n]; for (int i = 0; i < n; i++) data[i] = v.data[i]; return *this; } bool BitVector::operator==(const BitVector &v) { if (size != v.size || n != v.n) return false; for (int i = 0; i < n; i++) if (data[i] != v.data[i]) return false; return true; } istream& operator>>(istream &s, BitVector &v) { if (v.size == 0) { s.setstate(ios::failbit); return s; } for (int i = 0; i < v.size; i++) { char c; unsigned long mask = 1; s >> c; if (c != '0' && c != '1') { s.setstate(ios::failbit); return s; } if (c == '1') v.data[i/(sizeof(unsigned long) * 8)] |= (mask << ((sizeof(unsigned long) * 8) - 1 - i % (sizeof(unsigned long) * 8))); } return s; } ostream& operator<<(ostream &s, const BitVector &v) { unsigned long mask; int g = v.size % (sizeof(unsigned long) * 8); int t = (g == 0)? v.n : (v.n-1); for (int i = 0; i < t; i++) { for (int k = 0; k < (sizeof(unsigned long) * 8); k++) { mask = 1 << ((sizeof(unsigned long) * 8) - k - 1); if (v.data[i] & mask) s << 1; else s << 0; } } if (g != 0) for (int k = 0; k < g; k++) { mask = 1 << ((sizeof(unsigned long) * 8) - k - 1); if (v.data[v.n-1] & mask) s << 1; else s << 0; } return s; } BitVector BitVector::ResetBit(int bit_number); //метод,сбрасывающий заданный бит вектор// { ??????????????????????????????? } return *this; }
Решение задачи: «Метод, сбрасывающий заданный бит вектор»
textual
Листинг программы
#include <iostream> using namespace std; class BitVector { private: int size; int n; unsigned long *data; // add unsigned long mask; public: BitVector(); //конструктор инициализации BitVector(int num_bits); //тоже конструктор инициализации только для полей unsigned и какой то хитрый BitVector(const BitVector &v); //конструктор копирования, чтобы не работать с копиями кажется ~BitVector(); //деструктор BitVector& operator=(const BitVector &v); //перегрузка оператора присваивания bool operator == (const BitVector &v) ; //перегрузка оператора сравнения friend istream& operator>>(istream &s, BitVector &v); //перегрузка оператора потокового ввода friend ostream& operator<<(ostream &s, const BitVector &v); //перегрузка оператора потокового вывода BitVector ResetBit(int bit_number); };
Объяснение кода листинга программы
В данном коде представлен класс BitVector, который предназначен для работы с битовыми векторами. Ниже представлены основные элементы класса и их функции:
- size - размер битового вектора
- n - количество битов в векторе
- data - указатель на массив, в котором хранятся данные битового вектора
- mask - маска, используемая для операций с битами Методы класса BitVector:
- BitVector() - конструктор инициализации, который создает экземпляр класса BitVector с заданным размером
- BitVector(int num_bits) - конструктор инициализации, который создает экземпляр класса BitVector с заданным количеством битов
- BitVector(const BitVector &v) - конструктор копирования, который создает экземпляр класса BitVector, копируя данные из другого экземпляра
- ~BitVector() - деструктор, который освобождает память, занятую экземпляром класса BitVector
- BitVector& operator=(const BitVector &v) - перегрузка оператора присваивания, которая позволяет копировать данные из другого экземпляра класса BitVector
- bool operator == (const BitVector &v) - перегрузка оператора сравнения, которая позволяет сравнивать два экземпляра класса BitVector
- friend istream& operator>>(istream &s, BitVector &v) - перегрузка оператора потокового ввода, которая позволяет считывать данные из потока в экземпляр класса BitVector
- friend ostream& operator<<(ostream &s, const BitVector &v) - перегрузка оператора потокового вывода, которая позволяет выводить данные из экземпляра класса BitVector в поток
- BitVector ResetBit(int bit_number) - метод, который сбрасывает (устанавливает в 0) бит в заданной позиции Таким образом, данный код представляет собой реализацию класса BitVector для работы с битовыми векторами.