Определить, является ли симметричным двоичное представление длинного целого числа 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; }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с арифметическими операциями и вывода данных.
- Определение макросов для работы с битами:
—
chkbit(N, bit)
— возвращает значениеN
с учетом сдвига вправо наbit
позиций. —cmpbit(N, a, b)
— сравнивает значенияa
иb
в двоичном представлении числаN
. —INDEX
— индекс, определяющий положение бита в числе. - Объявление переменных:
—
n
— длинное целое число, для которого необходимо определить симметричность. —power
— степень двойки, определяющая количество циклов двоичного представления числаn
. —_Bool flag = FALSE
— флаг, определяющий четность числаn
. —_Bool simetr = FALSE
— флаг, определяющий симметричность числаn
. - Ввод значения числа
n
и инициализация переменнойtmp
этим же значением. - Поиск двоичной разрядности числа
n
путем деленияtmp
на 2 и сохранения результата в переменнойpower
. - Определение флага
flag
как остатка от деленияpower
на 2, что позволяет определить четность числаn
. - Вычисление центра числа
n
путем деленияpower
на 2. - Цикл, выполняющийся от 0 до
power
, в котором происходит сравнение соответствующих битов числаn
и, при необходимости, определение симметричности числа. - Вывод сообщения о результате проверки симметричности числа
n
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д