Вопрос № 180604: Здравствуйте у меня есть задание на поразрядная обработка целых чисел на языке си. нужно определить, является ли симметричным двоичное представление целого числа N. обработку числа необходимо сделать без использования строк, только с помощью сдвиг...
Вопрос № 180604:
Здравствуйте у меня есть задание на поразрядная обработка целых чисел на языке си. нужно определить, является ли симметричным двоичное представление целого числа N. обработку числа необходимо сделать без использования строк, только с помощью сдвигов, масок и битовых операций (&, | и т.д.). компилятор - visual c++ 6.0 у меня есть примерный алгоритм - создать две маски, установить их на концы числа и в цикле сдвигать их к середине, сравнивая биты. как реализовать этот алгоритм на языке си, я не знаю.
помогите, пожалуйста
Отвечает Гаряка Асмик (Профессор) :
Здравствуйте, Татьяна Львова!
Будем считать, что используем 32-битовый int. Первая маска - 0x80000000. Для сдвига используем сдвиг вправо >>. Вторая маска первоначально равна 0x1. Пусть число = n В цикле 16 раз сравниваем n&m1 c n&m2 Вводим булеву переменную, которая определяет результат.
Код:
int n, i, m1=0x80000000, m2=0x1; bool test=true; printf("vvedite chislo\n"); scanf("%d", &n); for(i=0;i<16;i++) { if((n&m1) != (n&m2)) {
test=false; break; } m1>>=1;m2<<=1; } if (test==false) printf("
ne simmetrichno\n"); else printf("simmetrichno\n");
----- Я ни от чего, ни от кого не завишу.
Ответ отправил: Гаряка Асмик (Профессор)
Ответ отправлен: 07.11.2010, 16:45
Номер ответа: 263864
Оценка ответа: 5
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 263864
на номер 1151 (Россия) |
Еще номера »
Отвечает vladisslav (6-й класс) :
Здравствуйте, Татьяна Львова! Еще можно так сделать. 5,3,6 и тому подобные числа будут симметричными.
Отредактировано в соответствии с минифорумом
-----
∙ Отредактировал: Verena (Профессионал)
∙ Дата редактирования: 10.11.2010, 17:02 (время московское)
Приложение:
Ответ отправил: vladisslav (6-й класс)
Ответ отправлен: 08.11.2010, 13:02
Номер ответа: 263881
Оценка ответа: 5
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 263881
на номер 1151 (Россия) |
Еще номера »
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.