Хелпикс

Главная

Контакты

Случайная статья





РАБОТА 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).

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.