Advertisement
CunningFox

Untitled

Nov 19th, 2019
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.97 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <cmath>
  4.  
  5. using namespace std;
  6.  
  7. void fn5_1()
  8. {
  9.     char tmp[33];
  10.  
  11.     int A, null = 0, B, ed = 0, i = 0, counter = 1;
  12.     cout << "A: ";
  13.     cin >> A;
  14.     itoa(A, tmp, 2);
  15.     cout << tmp;
  16.  
  17.     const unsigned int mask = 1 << 31;
  18.     B = A;
  19.     while (B != 1) // Подсчёт количества битов
  20.     {
  21.         B /= 2;
  22.         counter++;
  23.     }
  24.  
  25.     for (i = 1; i <= 32; i++) // Извлечение и подсчёт 1
  26.     {
  27.         if (mask & A)
  28.  
  29.             ed++;
  30.  
  31.  
  32.         A <<= 1;
  33.         if (i % 8 == 0) putchar(' ');
  34.     }
  35.     null = counter - ed;
  36.     cout << endl << "null: " << null;
  37.     cout << endl << "ed: " << ed;
  38.     cout << endl << "ed-null: " << ed - null << endl;
  39. }
  40.  
  41. void fn5_2()
  42. {
  43.  
  44. }
  45.  
  46. int main()
  47. {
  48.     setlocale(LC_CTYPE, "Russian");
  49.     // ВАРИАНТ 5
  50.     // 1.   Определить, насколько в числе А больше значащих битов, равных единице, чем битов, равных нулю.
  51.     /*
  52.    
  53.     system("pause");
  54.     */
  55.     // ОСН 2
  56.     // ВАРИАНТ 5
  57.     // 2.   Установить в 1 в числе А n битов вправо от позиции p, заменить ими m битов числа В, начиная с позиции q.
  58.     /*
  59.     int A, B, i = 0, counter = 1, mask=0,p,n,q,m;
  60.     //cin
  61.     cout << "---------- A ----------" << endl;
  62.     n = 3; cout << "n: " << n << endl;
  63.     p = 3; cout << "p: " << p << endl;
  64.     cout << endl << "---------- B ----------" << endl;
  65.     m = 4; cout << "m: " << m << endl;
  66.     q = 5; cout << "q: " << q << endl;
  67.     cout << endl << "-----------------------" << endl;
  68.  
  69.  
  70.     cout << "A: ";
  71.     cin >> A;
  72.     itoa(A, tmp, 2);
  73.     cout << tmp << endl << "----------------------------------------" << endl;
  74.  
  75.     for (i = p-1; i < p - 1 + n; i++)
  76.         {mask += pow(2,i);} // Маска A
  77.  
  78.     itoa(mask, tmp, 2);
  79.     cout << "Mask A: " << tmp << endl;
  80.     itoa(A | mask, tmp, 2);
  81.     cout << "A | Mask: " << tmp << endl;
  82.  
  83.     cout << tmp << endl << "----------------------------------------" << endl;
  84.  
  85.     cout << "B: ";
  86.     cin >> B;
  87.     itoa(B, tmp, 2);
  88.     cout << tmp << endl << "----------------------------------------" << endl;
  89.  
  90.     mask = 0;
  91.     for (i = q-1; i < q - 1 + m; i++)
  92.      {mask += pow(2,i);} // Маска B
  93.  
  94.     itoa(mask, tmp, 2);
  95.     cout << "Mask B: " << tmp << endl;
  96.     itoa(B | mask, tmp, 2);
  97.     cout << "B | Mask: " << tmp << endl;
  98.  
  99.     // ДОП 1 - 1
  100.     // ВАРИАНТ 9
  101.     //1.    Извлечь 5 битов числа A, начиная с третьего и вставить их в число B, начиная со 2.
  102.     /*
  103.     int A, B, maskA, maskB;
  104.  
  105.     maskA = 124;
  106.     maskB = ~maskA >> 1;
  107.  
  108.  
  109.     cout << "A: ";
  110.     cin >> A;
  111.     itoa(A, tmp, 2);
  112.     cout << tmp << endl << "----------------------------------------" << endl;
  113.  
  114.     cout << "B: ";
  115.     cin >> B;
  116.     itoa(B, tmp, 2);
  117.     cout << tmp << endl << "----------------------------------------" << endl;
  118.  
  119.     cout << "Mask A: ";
  120.     itoa(maskA, tmp, 2);
  121.     cout << tmp << endl << "----------------------------------------" << endl;
  122.  
  123.     cout << "Mask B: ";
  124.     itoa(maskB, tmp, 2);
  125.     cout << tmp << endl << "----------------------------------------" << endl;
  126.  
  127.     cout << "Выделенные биты A: ";
  128.     itoa((maskA & A) >> 2, tmp, 2);
  129.     cout << tmp << endl << "----------------------------------------" << endl;
  130.  
  131.     cout << "Очещинное число B: ";
  132.     itoa((maskB & B), tmp, 2);
  133.     cout << tmp << endl << "----------------------------------------" << endl;
  134.  
  135.     cout << "Результат: ";
  136.     itoa(((maskA & A) >> 1) | (maskB & B), tmp, 2);
  137.     cout << tmp << endl << "----------------------------------------" << endl;
  138.     */
  139.     // ДОП 1 - 2
  140.     // ВАРИАНТ 9
  141.     // 2.   Установить в 0 в числе А n битов вправо от позиции p.
  142.     /*
  143.  
  144.         int A, B, i = 0, counter = 1, mask=0,p,n,q,m;
  145.     //cin
  146.     n = 3; cout << "n: " << n << endl;
  147.     p = 5; cout << "p: " << p << endl;
  148.  
  149.  
  150.  
  151.     cout << "A: ";
  152.     cin >> A;
  153.     itoa(A, tmp, 2);
  154.     cout << tmp << endl << "----------------------------------------" << endl;
  155.  
  156.     for (i = (p-n)-1; i < (p-n) - 1 + n; i++)
  157.         {mask += pow(2,i);} // Маска A
  158.  
  159.     itoa(~mask, tmp, 2);
  160.     cout << "Mask A: " << tmp << endl;
  161.     itoa(A & ~mask, tmp, 2);
  162.     cout << "A & Mask: " << tmp << endl;
  163.     */
  164.     // ДОП 2 - 1
  165.     // ВАРИАНТ 10
  166.     //1.    Вывести 6 бит целого числа А, начиная со 2-ого.
  167.     /*
  168.     int A, B, maskA;
  169.  
  170.     maskA = 126;
  171.     cout << "A: ";
  172.     cin >> A;
  173.     itoa(A, tmp, 2);
  174.     cout << "A: " << tmp << endl;
  175.     itoa((A & maskA)>>1,tmp,2);
  176.     cout << "Выделенные биты: " << tmp << endl;
  177.     */
  178.  
  179.  
  180.     // ДОП 2 - 2
  181.     // ВАРИАНТ 10
  182.     //2.    Инвертировать в числе А n битов влево от позиции p.
  183.  
  184.     int A, maskA;
  185.     int i, p, n;
  186.     p = 3;
  187.     n = 5;
  188.  
  189.     maskA = 0;
  190.     cout << "A: ";
  191.     cin >> A;
  192.     itoa(A, tmp, 2);
  193.     cout << "A: " << tmp << endl;
  194.     for (i = p - 1; i < p - 1 + n; i++)
  195.     {
  196.         maskA += pow(2, i);
  197.     } // Маска A
  198.     itoa(maskA, tmp, 2);
  199.     cout << "MaskA: " << tmp << endl;
  200.     itoa((A ^ maskA), tmp, 2); // xor
  201.     cout << "Результат: " << tmp << endl;
  202.     system("pause");
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement