Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <bitset>
- using namespace std; // Подключение пространства имён
- void First() {
- cout << "Установка четырёх старших битов в 1" << endl;
- // Присвоение переменной значения из константы в шестнадцатеричной системе
- unsigned int decimal = 15;
- const int n = 8;
- //int n = 0x85; // в двоичной 10000101
- string binary = bitset<n>(decimal).to_string();
- cout << "Значение переменной в двоичном коде: " << binary << endl;
- // Маска для установки в 1 четырёх старших битов
- unsigned int maska = 240;
- decimal |= maska; // в двоичной 11110000
- string maska2 = bitset<n>(maska).to_string();
- cout << "Значение маски: " << maska2 << endl;
- string result = bitset<n>(decimal).to_string();
- cout << "Значение переменной после преобразований: " << result << endl << endl;
- // Вывод результата
- //cout << "Значение переменной после преобразования: " << n << endl;
- }
- void Second() {
- cout << "Обнуление 9-го, 11-го, 3-го битов" << endl;
- // Определение переменной целого типа
- unsigned int value;
- const int n = 8;
- // Ввод значения с клавиатуры
- cout << "Введите значение переменной: "; cin >> value; //cout << endl;
- string value2 = bitset<n>(value).to_string();
- cout << "Значение переменной в двоичном коде: " << value2 << endl;
- value &= (~((1 << 9) | (1 << 11) | (1 << 3))); // обнуление 9-го, 11-го, 3-го битов
- string result = bitset<n>(value).to_string();
- // Вывод результата
- cout << "Значение переменной после преобразования: " << result << endl << endl;
- }
- void Third() {
- cout << "Умножение значения переменной на 512 с использованием поразрядной операции" << endl;
- // Определение переменной целого типа
- unsigned int value;
- const int n = 16;
- // Ввод значения с клавиатуры
- cout << "Введите значение переменной: "; cin >> value; //cout << endl;
- string value2 = bitset<n>(value).to_string();
- cout << "Значение переменной в двоичном коде: " << value2 << endl;
- // Умножение значения переменной на 512 с использованием поразрядной операции
- value = value << 9; // Сдвиг влево на 9 битов эквивалентен умножению на 2^9 (512)
- string result = bitset<n>(value).to_string();
- // Вывод значения переменной после умножения
- cout << "Значение переменной после умножения на 512: " << result << endl << endl;
- }
- void Fourth() {
- cout << "Деление значения переменной на 512 с использованием поразрядной операции" << endl;
- // Определение переменной целого типа
- unsigned int value;
- const int n = 16;
- // Ввод значения с клавиатуры
- cout << "Введите значение переменной: "; cin >> value; //cout << endl;
- string value2 = bitset<n>(value).to_string();
- cout << "Значение переменной в двоичном коде: " << value2 << endl;
- // Деление значения переменной на 512 с использованием поразрядной операции
- value = value >> 9; // Сдвиг вправо на 9 битов эквивалентен делению на 2^9 (512)
- string result = bitset<n>(value).to_string();
- // Вывод значения переменной после умножения
- cout << "Значение переменной после деления на 512: " << result << endl << endl;
- }
- void Fiveth() {
- int number, num;
- const int n = 32;
- cout << "Введите число: ";
- cin >> number;
- cout << "Введите номер бита для обнуления (от 0 до 31): ";
- cin >> num;
- string number2 = bitset<n>(number).to_string();
- cout << "Значение - " << number2 << endl;
- // Инициализируем маску единицей в младшем разряде
- int mask = 1;
- string mask2 = bitset<n>(mask).to_string();
- cout << "Маска - " << mask2 << endl;
- // Сдвигаем маску на n позиций влево
- mask <<= num;
- // Применяем побитовую операцию НЕ (~) к маске, чтобы инвертировать все биты
- mask = ~mask;
- // Применяем побитовую операцию И (&) между числом и маской,
- // чтобы обнулить n-ый бит в числе
- number &= mask;
- string result = bitset<n>(number).to_string();
- cout << "Результат: " << result << endl;
- }
- int main()
- {
- setlocale(0, "");
- First();
- Second();
- Third();
- Fourth();
- Fiveth();
- return 0;
- system("pause");
- }
- //#include <iostream>
- //#include <bitset>
- //
- //const unsigned int MASK = 0xF0000000; // Маска для установки 4 старших битов в 1
- //
- //int main() {
- // setlocale(0, "");
- // unsigned int value = 0x12345678; // Исходное значение переменной
- //
- // value |= MASK; // Установка 4 старших битов в 1 с помощью поразрядной операции ИЛИ
- //
- // std::bitset<32> bitset(value);
- //
- // std::cout << "Исходное значение: " << std::bitset<32>(0x12345678) << std::endl;
- // std::cout << "Маска: " << std::bitset<32>(MASK) << std::endl;
- // std::cout << "Результат: " << bitset << std::endl;
- //
- // return 0;
- // system("pause");
- //}
- #2
- #include <iostream>
- #include <fstream>
- #include <bitset>
- #include <ctime>
- #include <cstdlib>
- #include <chrono>
- using namespace std;
- void displayProgress(long int completed, long int maximum) {
- static int lastPercent = -1;
- long int currentPercent = (completed * 100) / maximum;
- if (currentPercent != lastPercent) {
- lastPercent = currentPercent;
- cout << "Завершено " << currentPercent << "% выполнения." << std::endl;
- }
- }
- void sort1()
- {
- setlocale(0, "");
- const long int size = 10000000; // Размер std::bitset (10^7 бит)
- std::bitset<size>* numbers = new std::bitset<size>; // Используем std::bitset для хранения битов
- long int input;
- ofstream outfile("sort.txt");
- //cout << "Введите семизначные числа (0 для завершения):\n";
- //while (true) {
- // cin >> input;
- // if (input == 0) {
- // break;
- // }
- // if (input >= size / 10 && input <= 9999999) {
- // numbers->set(input - 1, 1);
- // }
- // else {
- // cout << "Введите семизначное число!\n";
- // }
- //}
- char repeat = 'n';
- cout << "Хотите выполнить автоматический ввод 20 чисел? (y/n): ";
- cin >> repeat;
- if (repeat == 'y' || repeat == 'Y') {
- srand(static_cast<unsigned int>(time(nullptr)));
- for (long int i = 19; i > 1; i--) {
- long int random_input = ((size / 10) * (1 + rand() % (8))) + ((rand() % (i + 1)) * (990));
- numbers->set(random_input, 1);
- }
- }
- auto start_time = chrono::high_resolution_clock::now();
- for (long int i = 0; i < size; i++) {
- if (numbers->test(i)) {
- outfile << i + 1 << endl;
- }
- }
- auto end_time = chrono::high_resolution_clock::now();
- auto execution_time = chrono::duration_cast<chrono::milliseconds>(end_time - start_time);
- outfile.close();
- cout << "Завершено. Результат записан в файл sort.txt.\n";
- cout << "Время выполнения: " << execution_time.count() << " миллисекунд." << endl;
- }
- int main() {
- sort1();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement