Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*25) Массив переменных типа unsigned int рассматривается как последовательность битов.
- Инвертировать подпоследовательность битов размера n с позиции p.
- Предполагается, что подпоследовательность битов может пересекать границы переменной int.Параметры p, n вводятся с клавиатуры.*/
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <string>
- #include <iostream>
- #define UI unsigned int
- UI Ust1(UI v, int k)
- {
- UI mask = 1;
- mask <<= k;
- v |= mask;
- return v;
- }
- UI Ust0(UI v, int k)
- {
- UI mask = 1;
- mask <<= k;
- v &= (~mask);
- return v;
- }
- UI VvodBV(int n)
- {
- UI v = 0, mask = 1; char s[33]; int i;
- std::cout << "input array:" << std::endl;
- std::cin >> s;
- for (i = 0; s[i]; i++)
- {
- v <<= 1;
- if (s[i] == '1') v++;
- }
- return v;
- }
- void PrintBV(UI v, UI n) {
- UI mask = 1, i;
- mask <<= n - 1;
- for (i = 0; i<n; i++, mask >>= 1)
- if (v&mask) putchar('1');
- else putchar('0');
- printf("\n");
- }
- UI invert_n(UI vector, int len, int count, int begin)
- {
- UI mask = 1;
- mask <<= len - 1;
- mask >>= begin;
- for (int i = 0; i < count; i++)
- {
- if (mask&vector)
- vector = Ust0(vector, len - begin - i - 1);
- else
- vector = Ust1(vector, len - begin - i - 1);
- mask >>= 1;
- if (len - begin - i> len)
- return vector;
- }
- return vector;
- }
- int main()
- {
- int n, len, p;
- std::cout << "input array length:" << std::endl;
- std::cin >> len;
- std::cout << "input how many elements you would to invert:" << std::endl;
- std::cin >> n;
- std::cout << "input start position:" << std::endl;
- std::cin >> p;
- UI vector;
- vector = VvodBV(len);
- vector = invert_n(vector, len, n, p);
- printf("result:\n");
- PrintBV(vector, len);
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement