Учебник по программированию на C для Linux, часть 14. Практические примеры побитовых операторов
На этой странице
- 1. Поменять местами значения двух переменных
- 2. Проверить количество двоичных единиц в числе
- 3. Программа C, чтобы проверить, равна ли данная битовая позиция 1 или нет
- Заключение
В одной из наших предыдущих статей мы обсуждали основы побитовых операторов. Надеюсь, вы прочитали эту статью и теперь готовы увидеть и понять некоторые примеры практического использования этих операторов. Итак, без лишних слов, давайте начнем.
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
Заключение
Четырех приведенных здесь примеров должно быть достаточно, чтобы дать вам хорошее представление о том, как можно использовать побитовые операторы в реальных сценариях. Попробуйте их на своих машинах, настройте их и заставьте их делать больше или что-то новое. В случае каких-либо сомнений или вопросов, оставьте комментарий здесь.