GoralWMoro

Untitled

Feb 12th, 2020
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.66 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. #include <sstream>
  5.  
  6. using namespace std;
  7. class BinaryVector{
  8. private:
  9. int size_array;
  10. vector<bool> tablica;
  11.  
  12. public:
  13. BinaryVector(int size){
  14. this->size_array = size;
  15. for(int i = 0; i < size; i++){
  16. tablica.push_back(false);
  17. }
  18. }
  19.  
  20. BinaryVector(int size, int value){
  21. this->size_array = size;
  22.  
  23. for (int i=size-1;i>=0; i--){
  24. (value&(1<<i)?tablica.push_back(true):tablica.push_back(false));
  25. }
  26.  
  27. }
  28.  
  29. int getSize(){
  30. return size_array;
  31. }
  32.  
  33. void setTrue(int position){
  34. tablica[position] = true;
  35. }
  36.  
  37. bool getAt(int position){
  38. return tablica[position];
  39. }
  40.  
  41.  
  42.  
  43. void printHex(){
  44. stringstream ss;
  45. ss<< std::hex << toInt(); // int decimal_value
  46. std::string res ( ss.str() );
  47.  
  48. std::cout << res;
  49. }
  50.  
  51. int toInt(){
  52. int number = 0;
  53.  
  54. for(int x = 0; x < size_array; x++)
  55. if(tablica[x] == true)number += (pow( 2, (size_array - x - 1)));
  56.  
  57. return number;
  58. }
  59.  
  60. void resize(int size){
  61. int roznica = this->size_array - size;
  62. if(size < this->size_array){
  63. tablica.erase(tablica.begin(), tablica.begin()+roznica);
  64. }else{
  65. vector<bool>::iterator it;
  66. it = tablica.begin();
  67. for(int i = 0; i < roznica; i++){
  68. tablica.insert(it, false);
  69. }
  70. }
  71. this->size_array = size;
  72. }
  73.  
  74. /////PRZECIAZENIA
  75. friend ostream & operator<< (ostream &wyjscie, const BinaryVector &s);
  76.  
  77. BinaryVector operator&(BinaryVector &drugi){
  78. int nowy_size;
  79. int roznica;
  80. if(this->size_array < drugi.size_array){
  81. nowy_size = this->size_array;
  82. roznica = drugi.size_array - this->size_array;
  83. }else{
  84. nowy_size = drugi.size_array;
  85. roznica = this->size_array - drugi.size_array;
  86. }
  87.  
  88. BinaryVector nowa_liczba(nowy_size);
  89.  
  90. for(int i = 0; i < nowy_size; i++){
  91. if(this->size_array < drugi.size_array) {
  92. nowa_liczba.tablica[i] = this->getAt(i) && drugi.getAt(i + roznica);
  93. }else {
  94. nowa_liczba.tablica[i] = this->getAt(i+roznica) && drugi.getAt(i);
  95. }
  96. }
  97.  
  98.  
  99. return nowa_liczba;
  100. }
  101.  
  102. BinaryVector operator|(BinaryVector &drugi){
  103. int nowy_size;
  104. int roznica;
  105. if(this->size_array < drugi.size_array){
  106. nowy_size = this->size_array;
  107. roznica = drugi.size_array - this->size_array;
  108. }else{
  109. nowy_size = drugi.size_array;
  110. roznica = this->size_array - drugi.size_array;
  111. }
  112.  
  113. BinaryVector nowa_liczba(nowy_size);
  114.  
  115. for(int i = 0; i < nowy_size; i++){
  116. if(this->size_array < drugi.size_array) {
  117. nowa_liczba.tablica[i] = this->getAt(i) || drugi.getAt(i + roznica);
  118. }else {
  119. nowa_liczba.tablica[i] = this->getAt(i+roznica) || drugi.getAt(i);
  120. }
  121. }
  122.  
  123.  
  124. return nowa_liczba;
  125. }
  126.  
  127. BinaryVector operator^(BinaryVector &drugi){
  128. int nowy_size;
  129. int roznica;
  130. if(this->size_array < drugi.size_array){
  131. nowy_size = this->size_array;
  132. roznica = drugi.size_array - this->size_array;
  133. }else{
  134. nowy_size = drugi.size_array;
  135. roznica = this->size_array - drugi.size_array;
  136. }
  137.  
  138. BinaryVector nowa_liczba(nowy_size);
  139.  
  140. for(int i = 0; i < nowy_size; i++){
  141. if(this->size_array < drugi.size_array) {
  142. nowa_liczba.tablica[i] = this->getAt(i) ^ drugi.getAt(i + roznica);
  143. }else {
  144. nowa_liczba.tablica[i] = this->getAt(i+roznica) ^ drugi.getAt(i);
  145. }
  146. }
  147.  
  148.  
  149. return nowa_liczba;
  150. }
  151.  
  152. BinaryVector operator<<(int liczba){
  153. BinaryVector nowa_liczba(this->size_array);
  154. nowa_liczba.tablica = this->tablica;
  155. for(int i = 0; i < liczba; i++){
  156. nowa_liczba.tablica.push_back(false);
  157. nowa_liczba.tablica.erase(nowa_liczba.tablica.begin(), nowa_liczba.tablica.begin()+1);
  158. }
  159. return nowa_liczba;
  160. }
  161.  
  162. BinaryVector operator>>(int liczba){
  163. BinaryVector nowa_liczba(this->size_array);
  164. nowa_liczba.tablica = this->tablica;
  165. vector<bool>::iterator it;
  166. it = nowa_liczba.tablica.begin();
  167. for(int i = 0; i < liczba; i++){
  168. nowa_liczba.tablica.insert(it, false);
  169. nowa_liczba.tablica.pop_back();
  170. }
  171. return nowa_liczba;
  172. }
  173.  
  174.  
  175. };
  176.  
  177. ostream & operator<<( std::ostream & out, const BinaryVector & t)
  178. {
  179. for( int i = 0; i < t.size_array ; i++)
  180. out << t.tablica[i];
  181. return out;
  182. }
  183.  
  184. int main() {
  185. BinaryVector a(5);
  186. a.setTrue(1);
  187. a.setTrue(0);
  188. BinaryVector b(6);
  189. b.setTrue(2);
  190. b.setTrue(3);
  191. b.setTrue(1);
  192. BinaryVector d(6);
  193. d.setTrue(2);
  194. d.setTrue(5);
  195. cout<<a<<endl; //11000
  196. cout<<b<<endl; //011100
  197. cout<<(a&b)<<endl; //11000
  198. cout<<(a|b)<<endl; //11100
  199. cout<<(a^b)<<endl; //00100
  200. cout<<(a<<2)<<endl; //1100000
  201. cout<<(a>>2)<<endl; //110
  202. cout<<(a.toInt())<<endl; //24
  203. BinaryVector c(6,23);
  204. cout<<c<<endl; //010111
  205. b.printHex(); //1C
  206. cout<<endl;
  207. c.printHex(); // 17
  208. cout<<endl<<(c.toInt())<<endl; //23
  209. c.resize(2);
  210. cout<<c.toInt(); //3
  211. cout<<((d<<7)^(b>>2)|(c<<1));
  212.  
  213. return 0;
  214. }
Advertisement
Add Comment
Please, Sign In to add comment