Определить, является ли симметричным двоичное представление длинного целого числа N - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Обработку двоичного числа делать без преобразование к строковому массиву, только сдвигами и битовыми операциями (&, | и т.д.)

Решение задачи: «Определить, является ли симметричным двоичное представление длинного целого числа N»

textual
Листинг программы
#include <stdio.h>
 
#define TRUE        1
#define FALSE       0
#define chkbit(N, bit)      ((N & 1 << bit) >> bit)
#define cmpbit(N, a, b)     (chkbit(N, a) == chkbit(N, b))
#define INDEX       ((!flag) ? (power - i-1): (power - i))
 
int n, power;
_Bool flag = FALSE;         //флаг четности 
_Bool simetr = FALSE;
 
int main(void)
{
    n = 0b11100000111100000111;
    int tmp = n;
    
    for(power = 0; tmp > 0;power++)     //ищем двоичную разрядность
        tmp /= 2;
    
    flag = (power%2);       
    power /= 2;             //на центр
    
    for(int i = 0; i <= power; i++)
    {
        if( cmpbit(n, (power+i), INDEX) )
            simetr = 1;
        else
        {
            simetr = 0;
            break;
        }
    }
    
    printf("Number "%d" is ", n);
    if(!simetr)
        printf("ne");
    printf(" simetrichno\n");
    return 0;
}

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

  1. Подключение необходимых библиотек для работы с арифметическими операциями и вывода данных.
  2. Определение макросов для работы с битами: — chkbit(N, bit) — возвращает значение N с учетом сдвига вправо на bit позиций. — cmpbit(N, a, b) — сравнивает значения a и b в двоичном представлении числа N. — INDEX — индекс, определяющий положение бита в числе.
  3. Объявление переменных: — n — длинное целое число, для которого необходимо определить симметричность. — power — степень двойки, определяющая количество циклов двоичного представления числа n. — _Bool flag = FALSE — флаг, определяющий четность числа n. — _Bool simetr = FALSE — флаг, определяющий симметричность числа n.
  4. Ввод значения числа n и инициализация переменной tmp этим же значением.
  5. Поиск двоичной разрядности числа n путем деления tmp на 2 и сохранения результата в переменной power.
  6. Определение флага flag как остатка от деления power на 2, что позволяет определить четность числа n.
  7. Вычисление центра числа n путем деления power на 2.
  8. Цикл, выполняющийся от 0 до power, в котором происходит сравнение соответствующих битов числа n и, при необходимости, определение симметричности числа.
  9. Вывод сообщения о результате проверки симметричности числа n.

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


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

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

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