Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- #include <cstdlib>
- #include <vector>
- #include <algorithm>
- #include <list>
- #include <math.h>
- using namespace std;
- class BinaryVector {
- public:
- vector<bool> tablica;
- int rozmiar;
- BinaryVector(int rozmiar) {
- this->rozmiar = rozmiar;
- for (int i = 0; i < rozmiar; i++) { // zerowanie tablicy
- tablica.push_back(0);
- }
- }
- BinaryVector(int rozmiar, int value) {
- this->rozmiar = rozmiar;
- bool pomocnik;
- for (int i = rozmiar - 1; i >= 0; i--) { // zamiana na binarna
- if (value % 2 == 0)pomocnik = false;
- else pomocnik = true;
- tablica[i] = pomocnik;
- value /= 2;
- }
- }
- int getSize() {
- return this->rozmiar;
- }
- void setTrue(int index) {
- tablica[index] = true;
- }
- bool getAt(int index) {
- return tablica[index];
- }
- int toInt() {
- int wynik = 0;
- for (int i = 0; i < rozmiar; i++) {
- if (i == rozmiar - 1) {
- if (tablica[i] == 1) wynik += 1;
- } else wynik += pow(2 * tablica[i], rozmiar - 1 - i);
- }
- return wynik;
- }
- void zamiana(int liczba, int system) {
- if (liczba > 0) {
- zamiana(liczba / system, system); //dzieki rekurencjji liczby sa wyswietlane w poprawnej kolejnosci
- if (liczba % system > 9)
- //dla systemów o podstawie większej niż 9 cyfry są literami
- switch (liczba % system) {
- case 10:
- cout << "A";
- break;
- case 11:
- cout << "B";
- break;
- case 12:
- cout << "C";
- break;
- case 13:
- cout << "D";
- break;
- case 14:
- cout << "E";
- break;
- case 15:
- cout << "F";
- break;
- }
- else
- cout << liczba % system;
- }
- }
- void printHex() {
- int liczba = toInt();
- zamiana(liczba, 16);
- cout << endl;
- }
- void resize(int rozmiar) {
- if (rozmiar != this->rozmiar) {
- vector<bool>::iterator it = tablica.begin();
- if (rozmiar > this->rozmiar) for (int i = 0; i < rozmiar - this->rozmiar; i++)tablica.insert(it, 0);
- else for (int i = 0; i < -rozmiar + this->rozmiar; i++) tablica.erase(it);
- this->rozmiar = rozmiar;
- }
- }
- /*
- BinaryVector operator&(const BinaryVector &drugi) {
- int j = drugi.rozmiar;
- for (int i = rozmiar - 1; i >= 0; i--) {
- if (j >= 0) {
- tablica[i] = tablica[i] * drugi.tablica[i];
- j--;
- } else tablica[0] = 0;
- }
- return *this;
- }
- BinaryVector operator|(const BinaryVector &drugi) {
- int j = drugi.rozmiar;
- for (int i = rozmiar - 1; i >= 0; i--) {
- if (j >= 0) {
- tablica[i] = tablica[i] + drugi.tablica[i];
- j--;
- }
- }
- return *this;
- }
- BinaryVector operator^(const BinaryVector &drugi) {
- int j = drugi.rozmiar;
- for (int i = rozmiar - 1; i >= 0; i--) {
- if (j >= 0) {
- tablica[i] = tablica[i] * drugi.tablica[i];
- j--;
- } else tablica[0] = 0;
- }
- return *this;
- }
- */
- };
- ostream &operator<<(ostream &out, BinaryVector &u) {
- string ciag;
- for (int i = 0; i < u.rozmiar; i++) {
- if (u.tablica[i] == 0)ciag += '0';
- else ciag += '1';
- }
- return out << ciag;
- }
- /*
- Przeciążenia operatorów bitowych - & - AND, | - OR, ^ - XOR - po obu stronach operatora jest obiekt klasy BinaryVector.
- Przeciążenie operatora << po lewej stronie strumień wyjścia, po prawej obiekt klasy BinaryVector.
- Przeciążenia operatorów bitowych - << - przesunięcie bitowe w lewo, << - przesunięcie bitowe w prawo - po lewej stronie operatora obiekt klasy BinaryVector po prawej liczba typu int określająca przesunięcie.
- */
- int main() {
- BinaryVector a(5);
- a.setTrue(1);
- a.setTrue(0);
- BinaryVector b(6);
- b.setTrue(2);
- b.setTrue(3);
- b.setTrue(1);
- cout << a << endl; //11000
- cout << b << endl; //011100
- a.resize(2);
- b.resize(10);
- cout << a << endl; //11000
- cout << b << endl; //011100
- // cout << (a & b) << endl; //11000
- // cout << (a | b) << endl; //11100
- /*
- cout<<(a^b)<<endl; //00100
- cout<<(a<<2)<<endl; //1100000
- cout<<(a>>2)<<endl; //110
- */
- cout << (a.toInt()) << endl; //24
- BinaryVector c(6, 23);
- cout << c << endl; //010111
- b.printHex(); //1C
- cout << endl;
- c.printHex(); // 17
- cout << endl << (c.toInt()) << endl; //23
- c.resize(2);
- cout << c.toInt(); //3
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment