|
|||
РАБОТА 11. БИТОВЫЕ ОПЕРАЦИИ. Пример 11.1РАБОТА 11 БИТОВЫЕ ОПЕРАЦИИ
Пример 11.1 Имеется число типа int. Определить, равен ли единице бит с номером к (нумерация справа). Решение реализовать в методе. Например, в числе (F6B)16 = (1111 0110 1011)2 6-ой (к=6) бит равен 1.
Вариант 1 Идея: формируем целое число-маску с единицей в к-ом бите, затем с помощью маски выделяем к-ый бит в исходном числе и проверяем результат выделения на равенство 1.
/* Пример 11.1 вариант 1 Имеется число типа int. Определить, равен ли единице бит с номером к (нумерация справа). Решение реализовать в методе */
class Program { static bool BitK(int a, byte k) // а - исходное число, // к - проверяемый бит
{ uint mask = (uint)(1 << k); // формирование маски
bool IsBitOne = (a & mask) != 0; //провкерка к-го бита return IsBitOne; }
static void Main(string[] args) { int v = 0XF6B; // исходное число byte k=6; bool result = BitK(v, k); if (result) Console.WriteLine("бит {0} равен 1", k); else Console.WriteLine("бит {0} не равен 1", k);
Console.ReadLine(); } }
Вариант 2 Идея: Сдвигаем исходное число на к бит вправо (чтобы интересующий нас бит оказался крайним справа), потом выделяем его с помощью целого, равного единице (это единица в крайнем правом бите), и результат выделения проверяем на неравенство нулю.
/* Пример 11.1 вариант 2 Имеется число типа int. Определить, равен ли единице бит с номером к (нумерация справа). Решение реализовать в методе */
class Program { static bool BitVar2(int a, byte k) { uint b=(uint)(a>>k); // сдвиг исходного числа вправо // на к бит b = b & 1; // выделение крайнего правого бита return b != 0; // возвращение результата метода }
static void Main(string[] args) { int a = 0XF6b; byte k = 6; bool kBitOne = BitVar2(a,k); if (kBitOne) Console.WriteLine("бит с номером {0} равен 1",k,a); else Console.WriteLine("бит с номером {0} не равен 1", k, a);
Console.ReadLine(); } }
Задание 1 Разработать метод, подсчитывающий количество единиц в битовом представлении числа типа int. Задание 2 Разработать метод, формирующий число типа ulong путем сцепления двух чисел типа int. Задание 3 Имеется массив целых чисел (типа int). Определить индекс элемента, в битовом представлении которого наибольшее количество единиц. Задание 4 Имеется массив целых чисел. Вывести на печать все элементы массива, у которых к-ый бит равен единице. Задание 5 Имеется 2 целых числа типа int. Определить количество поразрядно совпадающих бит. Например, в числах 1001 1011 и 0111 0001 их 3 (биты с номерами 0, 2, 4).
|
|||
|