Составить функцию inv (x, q, m), что возвращает значение x с инвертированными m битами, начиная с позиции q - C (СИ)
Формулировка задачи:
Составить функцию inv ( x , q , m ) , что возвращает значение x с инвертированными m битами, начиная с позиции q (другие биты не изменяются ) .
Решение задачи: «Составить функцию inv (x, q, m), что возвращает значение x с инвертированными m битами, начиная с позиции q»
textual
Листинг программы
#include <io.h> #include <stdlib.h> #include <stdio.h> void inv(int* x, int q, int m) { *x ^= (1 << q) - 1; *x ^= (1 << (q + m)) - 1; } void print_bin(int num) { if (num > 1) print_bin(num >> 1); printf("%d", num & 1); } int main(void) { FILE* fp; int a, q, m; if ((fp = fopen("d://test.dat", "r")) == NULL) { printf("Error: couldn't open file.\n"); exit(1); } fscanf(fp, "%d %d %d", &a, &q, &m); fprintf(stdout, "Data in file: %d %d %d\n", a, q, m); fclose(fp); printf("Before:\n", a, q, m); print_bin(a); inv(&a, q, m); printf("\nAfter:\n"); print_bin(a); return 0; }
Объяснение кода листинга программы
- include
- Подключает библиотеку для работы с файлами - include
- Подключает библиотеку для работы с памятью - include
- Подключает библиотеку для работы с выводом - *void inv(int x, int q, int m)** - функция, которая инвертирует m битов числа x, начиная с позиции q
- void print_bin(int num) - функция, которая выводит двоичное представление числа
- int main(void) - точка входа в программу
- *FILE fp;** - переменная типа указатель на файл
- int a, q, m; - переменные для хранения данных из файла
- if ((fp = fopen(
d://test.dat
,r
)) == NULL) - открывает файл для чтения - printf(
Error: couldn't open file.\n
); - выводит сообщение об ошибке - exit(1); - завершает программу с кодом ошибки
- fscanf(fp,
%d %d %d
, &a, &q, &m); - считывает данные из файла в переменные a, q, m - fprintf(stdout,
Data in file: %d %d %d\n
, a, q, m); - выводит данные из файла на экран - fclose(fp); - закрывает файл
- printf(
Before:\n
); - выводит заголовокBefore:
- print_bin(a); - выводит двоичное представление числа a
- inv(&a, q, m); - инвертирует m битов числа a, начиная с позиции q
- printf(
\nAfter:\n
); - выводит заголовокAfter:
- print_bin(a); - выводит двоичное представление числа a
- return 0; - завершает программу без ошибок
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д