#include <iostream>
#include <cstdint>
#include <vector> // Для безопасной работы с динамическими массивами
using U16 = uint16_t;
int main() {
// 1. Ввод размера массива с проверкой на корректность
unsigned int n;
std::cout << "Введите размер массива n (n > 0): ";
if (!(std::cin >> n) || n == 0) {
std::cerr << "Ошибка: введите корректное положительное число.\n";
return 1;
}
// 2. Ввод числа A с проверкой диапазона
unsigned int tmp;
std::cout << "Введите число A (0..65535): ";
if (!(std::cin >> tmp) || tmp > 65535) {
std::cerr << "Ошибка: число должно быть в диапазоне 0..65535.\n";
return 1;
}
U16 A = static_cast<U16>(tmp);
// 3. Применение битовой маски
// Обнуляем 8-й, 11-й и 14-й биты. Остальные оставляем без изменений.
constexpr U16 mask = ~((1u << 8) | (1u << 11) | (1u << 14));
A = A & mask;
// 4. Создание и инициализация массива
// std::vector автоматически управляет памятью (не нужен delete)
// Второй аргумент (A) заполняет все n элементов этим значением
std::vector<U16> arr(n, A);
// 5. Вывод инициализированного массива
std::cout << "\nИнициализированный массив:\n";
for (unsigned int i = 0; i < n; ++i) {
std::cout << "arr[" << i << "] = " << arr[i] << "\n";
}
// 6. Поиск элементов, у которых младшие 4 бита равны 0
std::cout << "\nЭлементы, у которых младшие 4 бита равны 0:\n";
bool found = false;
for (unsigned int i = 0; i < n; ++i) {
if ((arr[i] & 0x000F) == 0) {
std::cout << "arr[" << i << "] = " << arr[i] << "\n";
found = true;
}
}
if (!found) {
std::cout << "Таких элементов нет.\n";
}
// Память освободится автоматически при выходе из области видимости std::vector
return 0;
}