Битовая операция - 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(), чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д