Битовая операция - C (СИ)
Формулировка задачи:
Выполнить проверку заданного (вводится с клавиатуры) бита числа В и если заданный бит имеет значение «ЛОЖЬ»(равен 0) , установить его.
Переменные А и B должны иметь тип unsigned int.
Исходные данные и результат вывести в десятичной, шестнадцатеричной системах счисления и в виде двоичного числа.
Решение задачи: «Битовая операция»
textual
Листинг программы
#include<stdio.h>
void binary(unsigned int x,unsigned int size);
unsigned int check(unsigned int b,unsigned int a);
int main(void)
{
unsigned int a,b;
printf("Enter number b (b>0): ");
scanf("%u",&b);
printf("Enter bit number a (a<0<=%d): ",8*sizeof(unsigned));
scanf("%u",&a);
printf("\n");
printf("Source data\n");
printf("decimal: %u\n",b);
printf("heximal: %0*X\n",2*sizeof(unsigned),b);
printf("binary: ");
binary(b,8*sizeof(b));
printf("\n\n\n");
printf("bit number %d has value ",a);
if(check(b,a))
printf("1\n\n\n");
else
{
printf("0\n\n\n");
b=b|(1<<(a-1));
}
printf("Result\n");
printf("decimal: %u\n",b);
printf("heximal: %0*X\n",2*sizeof(unsigned),b);
printf("binary: ");
binary(b,8*sizeof(b));
printf("\n");
return 0;
}
void binary(unsigned int x,unsigned int size)
{
if(!size)
{
return;
}
binary(x/2,--size);
printf("%u",x%2);
}
unsigned int check(unsigned int b,unsigned int a)
{
return b&(1<<(a-1));
}
Объяснение кода листинга программы
- Включаем заголовочный файл inttypes.h для использования типов данных uint и size_t
- Объявляем функцию void binary(unsigned int x,unsigned int size), которая принимает два аргумента типа unsigned int: x и size. Значение x будет делиться на два в соответствии с размером переменной типа size_t.
- Объявляем функцию unsigned int check(unsigned int b,unsigned int a), которая принимает два аргумента типа unsigned int: b и a. Функция возвращает значение b с битом a, установленным в 1.
- В функции main() объявляем две переменные типа unsigned int: a и b.
- Выводим сообщение
Enter number b (b>0):и считываем значение b с помощью функции scanf(). - Выводим сообщение
Enter bit number a (a<0<=%d):и считываем значение a с помощью функции scanf(). - Выводим исходное число b в десятичной, шестнадцатеричной системе и его двоичное представление.
- Вызываем функцию binary(b,8*sizeof(b)) для преобразования числа b в его двоичное представление.
- Выводим сообщение
bit number %d has valueи если check(b,a) возвращает 1, выводим1, иначе выводим0. - Используем оператор побитового И (&) для установки бита a в числе b в 1.
- Выводим результат в десятичной, шестнадцатеричной системе и его двоичное представление.
- Возвращаем 0 в функции main(), чтобы указать, что программа успешно завершилась.