Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2009, 11:46   #1
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,837
По умолчанию Задачка на сообразительность (Делфи)

Что делает данная программка (консольная, Делфи):
Код:
var a, b: Integer;
begin
  ReadLn (a, b);
  WriteLn (a and ((a - b) shr 31 - 1) or b and not ((a - b) shr 31 - 1));
end.
Ответьте без компиляции.
Arigato вне форума Ответить с цитированием
Старый 22.12.2009, 11:50   #2
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Могу предположить, что умножает эти два числа, но я могу ошибаться.
Код:
a and       ((a - b) shr 31 - 1) 
or 
b and not ((a - b) shr 31 - 1)

Последний раз редактировалось Levsha100; 22.12.2009 в 12:12.
Levsha100 вне форума Ответить с цитированием
Старый 22.12.2009, 11:56   #3
Juffin
Форумчянин
Форумчанин
 
Аватар для Juffin
 
Регистрация: 05.04.2009
Сообщений: 446
По умолчанию

а что такое shr?
Nobody expects Spanish Inquisition!
Juffin вне форума Ответить с цитированием
Старый 22.12.2009, 12:00   #4
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Побитовый сдвиг.
Levsha100 вне форума Ответить с цитированием
Старый 22.12.2009, 12:06   #5
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Говорит какое из них больше ?
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 22.12.2009 в 12:31.
Goodwin98 вне форума Ответить с цитированием
Старый 22.12.2009, 13:01   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,837
По умолчанию

Цитата:
Сообщение от Goodwin98
Говорит какое из них больше ?
Определили без компиляции?

А как переделать код, что бы находил меньшее из 2-х чисел?
Arigato вне форума Ответить с цитированием
Старый 22.12.2009, 13:16   #7
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Цитата:
Определили без компиляции?
да у меня и дельфи-то нету...
Цитата:
А как переделать код, что бы находил меньшее из 2-х чисел?
может быть
a and not ((a - b) shr 31 - 1) or b and ((a - b) shr 31 - 1)) ?
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 22.12.2009 в 13:18.
Goodwin98 вне форума Ответить с цитированием
Старый 22.12.2009, 17:07   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,837
По умолчанию

Более наглядно код выглядит так:
Код:
Readln (a, b);
k := (a - b) shr 31 - 1;
max := a and k or b and not k;
Writeln (max);
Вычисление максимума из двух чисел, не используя операции сравнения, только арифметические и логические операции.
Arigato вне форума Ответить с цитированием
Старый 23.12.2009, 23:31   #9
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
и логические операции
В данном случае они не логические а побитовые. В С++ к примеру для этого отдельные операторы.

Ну, а расшифровать для публики?
Насколько я понял, в силу моего дырявого образования, 31 это потому что интегер 32 битный, т.е. таким образом определяется по первому биту, отрицательное значение или положительное?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 23.12.2009, 23:37   #10
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Цитата:
31 это потому что интегер 32 битный
А если unsigned модификатор?
Блин, мой тупой парсер захавал строку
Цитата:
В С++ к примеру для этого отдельные операторы.
и сказал мозгу что тут идет речь С++.
Сори.
P.S. Пора процу в спящий режим, а то еще и перезагружусь.
P.S.S. Как то странно я сегодня мессажу 0_О

Последний раз редактировалось Levsha100; 23.12.2009 в 23:40.
Levsha100 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачка на Делфи R_A_M_I_L7777777 Помощь студентам 25 18.02.2010 18:59
задачка в Делфи Kravec Помощь студентам 0 07.06.2009 19:16
Задачка на делфи Танка Помощь студентам 0 02.06.2009 17:04
Задачка в Делфи Milashka Помощь студентам 2 29.12.2008 13:44