Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdlib.h>
- #include <cmath>
- using namespace std;
- void fn5_1()
- {
- char tmp[33];
- int A, null = 0, B, ed = 0, i = 0, counter = 1;
- cout << "A: ";
- cin >> A;
- itoa(A, tmp, 2);
- cout << tmp;
- const unsigned int mask = 1 << 31;
- B = A;
- while (B != 1) // Подсчёт количества битов
- {
- B /= 2;
- counter++;
- }
- for (i = 1; i <= 32; i++) // Извлечение и подсчёт 1
- {
- if (mask & A)
- ed++;
- A <<= 1;
- if (i % 8 == 0) putchar(' ');
- }
- null = counter - ed;
- cout << endl << "null: " << null;
- cout << endl << "ed: " << ed;
- cout << endl << "ed-null: " << ed - null << endl;
- }
- void fn5_2()
- {
- }
- int main()
- {
- setlocale(LC_CTYPE, "Russian");
- // ВАРИАНТ 5
- // 1. Определить, насколько в числе А больше значащих битов, равных единице, чем битов, равных нулю.
- /*
- system("pause");
- */
- // ОСН 2
- // ВАРИАНТ 5
- // 2. Установить в 1 в числе А n битов вправо от позиции p, заменить ими m битов числа В, начиная с позиции q.
- /*
- int A, B, i = 0, counter = 1, mask=0,p,n,q,m;
- //cin
- cout << "---------- A ----------" << endl;
- n = 3; cout << "n: " << n << endl;
- p = 3; cout << "p: " << p << endl;
- cout << endl << "---------- B ----------" << endl;
- m = 4; cout << "m: " << m << endl;
- q = 5; cout << "q: " << q << endl;
- cout << endl << "-----------------------" << endl;
- cout << "A: ";
- cin >> A;
- itoa(A, tmp, 2);
- cout << tmp << endl << "----------------------------------------" << endl;
- for (i = p-1; i < p - 1 + n; i++)
- {mask += pow(2,i);} // Маска A
- itoa(mask, tmp, 2);
- cout << "Mask A: " << tmp << endl;
- itoa(A | mask, tmp, 2);
- cout << "A | Mask: " << tmp << endl;
- cout << tmp << endl << "----------------------------------------" << endl;
- cout << "B: ";
- cin >> B;
- itoa(B, tmp, 2);
- cout << tmp << endl << "----------------------------------------" << endl;
- mask = 0;
- for (i = q-1; i < q - 1 + m; i++)
- {mask += pow(2,i);} // Маска B
- itoa(mask, tmp, 2);
- cout << "Mask B: " << tmp << endl;
- itoa(B | mask, tmp, 2);
- cout << "B | Mask: " << tmp << endl;
- // ДОП 1 - 1
- // ВАРИАНТ 9
- //1. Извлечь 5 битов числа A, начиная с третьего и вставить их в число B, начиная со 2.
- /*
- int A, B, maskA, maskB;
- maskA = 124;
- maskB = ~maskA >> 1;
- cout << "A: ";
- cin >> A;
- itoa(A, tmp, 2);
- cout << tmp << endl << "----------------------------------------" << endl;
- cout << "B: ";
- cin >> B;
- itoa(B, tmp, 2);
- cout << tmp << endl << "----------------------------------------" << endl;
- cout << "Mask A: ";
- itoa(maskA, tmp, 2);
- cout << tmp << endl << "----------------------------------------" << endl;
- cout << "Mask B: ";
- itoa(maskB, tmp, 2);
- cout << tmp << endl << "----------------------------------------" << endl;
- cout << "Выделенные биты A: ";
- itoa((maskA & A) >> 2, tmp, 2);
- cout << tmp << endl << "----------------------------------------" << endl;
- cout << "Очещинное число B: ";
- itoa((maskB & B), tmp, 2);
- cout << tmp << endl << "----------------------------------------" << endl;
- cout << "Результат: ";
- itoa(((maskA & A) >> 1) | (maskB & B), tmp, 2);
- cout << tmp << endl << "----------------------------------------" << endl;
- */
- // ДОП 1 - 2
- // ВАРИАНТ 9
- // 2. Установить в 0 в числе А n битов вправо от позиции p.
- /*
- int A, B, i = 0, counter = 1, mask=0,p,n,q,m;
- //cin
- n = 3; cout << "n: " << n << endl;
- p = 5; cout << "p: " << p << endl;
- cout << "A: ";
- cin >> A;
- itoa(A, tmp, 2);
- cout << tmp << endl << "----------------------------------------" << endl;
- for (i = (p-n)-1; i < (p-n) - 1 + n; i++)
- {mask += pow(2,i);} // Маска A
- itoa(~mask, tmp, 2);
- cout << "Mask A: " << tmp << endl;
- itoa(A & ~mask, tmp, 2);
- cout << "A & Mask: " << tmp << endl;
- */
- // ДОП 2 - 1
- // ВАРИАНТ 10
- //1. Вывести 6 бит целого числа А, начиная со 2-ого.
- /*
- int A, B, maskA;
- maskA = 126;
- cout << "A: ";
- cin >> A;
- itoa(A, tmp, 2);
- cout << "A: " << tmp << endl;
- itoa((A & maskA)>>1,tmp,2);
- cout << "Выделенные биты: " << tmp << endl;
- */
- // ДОП 2 - 2
- // ВАРИАНТ 10
- //2. Инвертировать в числе А n битов влево от позиции p.
- int A, maskA;
- int i, p, n;
- p = 3;
- n = 5;
- maskA = 0;
- cout << "A: ";
- cin >> A;
- itoa(A, tmp, 2);
- cout << "A: " << tmp << endl;
- for (i = p - 1; i < p - 1 + n; i++)
- {
- maskA += pow(2, i);
- } // Маска A
- itoa(maskA, tmp, 2);
- cout << "MaskA: " << tmp << endl;
- itoa((A ^ maskA), tmp, 2); // xor
- cout << "Результат: " << tmp << endl;
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement