Поиск по сайту:

Учебник по программированию на C для Linux, часть 14. Практические примеры побитовых операторов


На этой странице

  1. 1. Поменять местами значения двух переменных
  2. 2. Проверить количество двоичных единиц в числе
  3. 3. Программа C, чтобы проверить, равна ли данная битовая позиция 1 или нет
  4. Заключение

В одной из наших предыдущих статей мы обсуждали основы побитовых операторов. Надеюсь, вы прочитали эту статью и теперь готовы увидеть и понять некоторые примеры практического использования этих операторов. Итак, без лишних слов, давайте начнем.

1. Поменять местами значения двух переменных

Я уверен, что вы знаете логику обмена значениями двух переменных. Он включает использование третьей переменной для временного хранения одного значения, а затем присвоение этого значения одной из переменных (чье исходное значение уже было присвоено другой переменной).

Например, если a и b — переменные, значения которых необходимо поменять местами, а c — временная переменная, то вот как работает стандартная логика:

c = a;
a = b;
b = c;

Но знаете ли вы, что весь этот процесс подкачки можно выполнить с помощью побитовых операторов? Да, это правда, и логика в этом случае даже не требует третьей переменной. Вот код:

#include <stdio.h>

int main()
{
int a, b;

printf("Enter first number: ");
scanf("%d", &a);

printf("Enter second number: ");
scanf("%d", &b);

printf("As per your input, a = %d, and b = %d", a,b);

a = a ^ b;
b = a ^ b;
a = a ^ b;

printf("\nAfter swapping, a = %d, and b = %d", a,b);


return 0;
}

Вот результат:

Enter first number: 7 
Enter second number: 2
As per your input, a = 7, and b = 2
After swapping, a = 2, and b = 7

2. Проверить количество двоичных единиц в числе

Иногда вы можете оказаться в ситуации, когда вам нужно подсчитать количество битов, установленных в 1 в числе. Вы будете рады узнать, что можете легко сделать это с помощью побитовых операторов. Вот логика:

#include <stdio.h>

int main()
{
int a, num_of_bits = 0;

printf("Enter a number: ");
scanf("%d", &a);

while(a)
{
if(a & 1)
num_of_bits++;

a = a >> 1;
}

printf("\nNumber of binary 1s in this number is %d", num_of_bits);

return 0;
}

Вот результат:

Enter a number: 5 

Number of binary 1s in this number is 2

3. Программа на C, чтобы проверить, равна ли данная битовая позиция 1 или нет

Иногда, особенно при работе с кодом, связанным с компьютерными сетями (протоколами и т. д.), вам необходимо проверить, установлена ли конкретная битовая позиция в 1 или нет. Это легко сделать с помощью побитовых операторов.

Вот код:

 #include <stdio.h>

int main()
{
int num, position, temp;

printf("Enter a number: ");
scanf("%d", &num);

printf("Enter the bit position (keeping zero as base index and 31 as max): ");
scanf("%d", &position);

if(((num>>position)&1) == 1)
printf("\nBit at the position is 1");
else
printf("\nBit at the position is 0");

return 0;
}

Вот результат:

Enter a number: 2 
Enter the bit position (keeping zero as base index and 31 as max): 3

Bit at the position is 0

4. Преобразуйте десятичное число в двоичную форму.

Побитовые операторы также можно использовать для преобразования десятичного числа в его двоичную форму. Вот одна логика для этого:

#include <stdio.h>

int main()
{
int num, i = 0, temp = 0;
int bin[32] = {0}; // this will initialize all array elements to 0

/* Input number from user */
printf("Enter any number: ");
scanf("%d", &num);

for(i =31; i>=0; i--)
{
if((num & 1) == 1)
{
bin[i] = 1;

num = num>>1;
}

printf("The binary form of the number you entered is: ");

for(i=0; i<32; i++)
{
printf("%d",bin[i]);
}

return 0;
}

Вот что получилось в моем случае:

Enter any number: 15 
The binary form of the number you entered is: 00000000000000000000000000001111

Заключение

Четырех приведенных здесь примеров должно быть достаточно, чтобы дать вам хорошее представление о том, как можно использовать побитовые операторы в реальных сценариях. Попробуйте их на своих машинах, настройте их и заставьте их делать больше или что-то новое. В случае каких-либо сомнений или вопросов, оставьте комментарий здесь.