Advertisement
TwITe

Untitled

Aug 4th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.11 KB | None | 0 0
  1. /& для целых переменных
  2. int bit_and_for_int_f1(int a, int b) {
  3.     int c = a & b;
  4.     //cout << c << endl;
  5.     return c;
  6. }
  7.  
  8. //& для целых переменных без оператора &
  9. int bit_and_for_int_f2(int a, int b) {
  10.     bitset <32> number_one(a);
  11.     //cout << number_one.to_ulong() << " = " << number_one << endl;
  12.     bitset <32> number_two(b);
  13.     //cout << number_two.to_ulong() << " = " << number_two << endl;
  14.     bitset <32> number;
  15.     for (int i = 31; i >= 0; i--) {
  16.         if (number_one[i] == 1) {
  17.             if (number_two[i] == 1) {
  18.                 number[i] = 1;
  19.             }
  20.             else {
  21.                 number[i] = 0;
  22.             }
  23.         }
  24.         else {
  25.             if (number_two[i] == 1) {
  26.                 number[i] = 0;
  27.             }
  28.             else {
  29.                 number[i] = 0;
  30.             }
  31.         }
  32.     }
  33.     //cout << endl << number.to_ulong() << " = " << number;
  34.     return number.to_ulong();
  35. }
  36.  
  37. //тест & для целых переменных
  38. void can_bit_and() {
  39.     for (int i = 0; i < 1000; i+=10) {
  40.         int c = i & (i + 2);
  41.         assert(bit_and_for_int_f1(i, i + 2) == bit_and_for_int_f2(i, i + 2));
  42.         assert(c == bit_and_for_int_f1(i, i + 2));
  43.         assert(c == bit_and_for_int_f2(i, i + 2));
  44.     }
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement