Составить функцию 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;
}

Объяснение кода листинга программы

  1. include - Подключает библиотеку для работы с файлами
  2. include - Подключает библиотеку для работы с памятью
  3. include - Подключает библиотеку для работы с выводом
  4. *void inv(int x, int q, int m)** - функция, которая инвертирует m битов числа x, начиная с позиции q
  5. void print_bin(int num) - функция, которая выводит двоичное представление числа
  6. int main(void) - точка входа в программу
  7. *FILE fp;** - переменная типа указатель на файл
  8. int a, q, m; - переменные для хранения данных из файла
  9. if ((fp = fopen(d://test.dat, r)) == NULL) - открывает файл для чтения
  10. printf(Error: couldn't open file.\n); - выводит сообщение об ошибке
  11. exit(1); - завершает программу с кодом ошибки
  12. fscanf(fp, %d %d %d, &a, &q, &m); - считывает данные из файла в переменные a, q, m
  13. fprintf(stdout, Data in file: %d %d %d\n, a, q, m); - выводит данные из файла на экран
  14. fclose(fp); - закрывает файл
  15. printf(Before:\n); - выводит заголовок Before:
  16. print_bin(a); - выводит двоичное представление числа a
  17. inv(&a, q, m); - инвертирует m битов числа a, начиная с позиции q
  18. printf(\nAfter:\n); - выводит заголовок After:
  19. print_bin(a); - выводит двоичное представление числа a
  20. return 0; - завершает программу без ошибок

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.308 из 5
Похожие ответы