Advertisement
CosminVarlan

Bits play

Jun 19th, 2020
2,235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1. #include <iostream>
  2.  
  3.  
  4. using namespace std;
  5.  
  6. void displayBinary(int a){
  7.     short v[32];
  8.     for(int i=0; i<32; i++)
  9.     {
  10.         v[i] = a & 1;
  11.         a = a >> 1;
  12.     }
  13.     for(int i=31; i>=0; i--)
  14.         cout << v[i];
  15.     cout << endl;
  16. }
  17.  
  18.  
  19. int main()
  20. {
  21.     unsigned int a = 0; /// 32 de biti de 0
  22.     /// 00000000000000000000000000000000 = 0
  23.     /// 00000000000000000000000000000001 = 1
  24.     /// 00000000000000000000000000000010 = 2
  25.     /// 00000000000000000000000000000011 = 3
  26.     /// 00000000000000000000000000000100 = 4
  27.     /// .....
  28.     /// 11111111111111111111111111111111 = 4294967295 (2^32 - 1)
  29.  
  30.     int b=1;  /// SHIFTARE BITI == INMULTIRE/IMPARTIRE CU 2^NR_BITI_SHIFTATI
  31.     b = b << 1;        /// echivalent cu b = b*2;
  32.     b = b << 3;        /// echivalent cu b = b*8;
  33.     b = b >> 1;        /// echivalent cu b = b/2;
  34.  
  35.  
  36.     a = 256;
  37.     displayBinary(a);
  38.  
  39.     a = a + (1<<5); /// daca deja este ceva pe pozitia 6, va muta ambii pe pozitia 7 /// ADUNARE PE BITI
  40.     /// 00000000000000000000000000100000 = 32;
  41.     /// 00000000000000000000000100000000 = 256
  42.     displayBinary(a);
  43.  
  44.     /// setez bitul de pe pozitia luui 2^5 (al saselea de al coada) = adica il fac 1, indiferent ed cat era
  45.     a = a | (1<<5); /// SAU LOGIC PE BITI
  46.     displayBinary(a);
  47.  
  48.     /// ca sa schimb valoarea bitului (daca era 0 se face 1, daca era 1 se face 0)  XOR
  49.     /// pe pozitia 6 am cu siguranta 1 de la SAU-ul anterior
  50.     a = a ^ (1<<5); /// XOR LOGIC PE BITI (sau exclusiv)
  51.     displayBinary(a);
  52.  
  53.     /// pentru testarea adac un bit este setat, se foloseste si logic pe biti:
  54.     if(a & (1<<5)) cout << "bitul 6 este 1";
  55.               else cout << "bitul 6 este 0";
  56.  
  57.     /// la ce ma ajuta toata povestea
  58.     /// * inmultire/impartire cu puteri a lui 2 foarte rapide
  59.     /// * daca vreau sa tin minte anumite setari de tip flag (32 ed flag-uri pot fi tinute intr-un singur int)
  60.  
  61.  
  62.     cout << endl;
  63.     cout << endl;
  64.     cout << endl;
  65.  
  66.     // DISCUTIA CU SEMN
  67.     int c = -4; /// 32 de biti de 0
  68.     /// 00000000000000000000000000000000 = 0
  69.     /// 00000000000000000000000000000001 = 1
  70.     /// 00000000000000000000000000000010 = 2
  71.     /// 00000000000000000000000000000011 = 3
  72.     /// 00000000000000000000000000000100 = 4
  73.  
  74.     /// 11111111111111111111111111111100  = -4
  75.     /// 00000000000000000000000000000011  = 3
  76.     /// 00000000000000000000000000000100  = 4
  77.     /// 11111111111111111111111111111111  = -1
  78.     displayBinary(c);
  79.  
  80.     return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement