Комментарии 28
Да, еще в школе об этом рассказывают.
=)
цэ нервно курит в стороне
цэ нервно курит в стороне
С нетерпением ждем топика про то, как написать «хелоу ворлд».
Про переполнение и исключающее или заметили правильно выше.
Про переполнение и исключающее или заметили правильно выше.
http://www.roesler-ac.de/wolfram/hello.h… и http://en.wikibooks.org/wiki/List_of_hel…
Выбирайте что больше нравится :)
Выбирайте что больше нравится :)
ok, в следующий раз напишу про Hello World, хотя на википедии вроде про него уже все написано ;)
Что-то мне подсказывает что даже mov'ов здесь больше будет чем с 'c', не говоря уже про сложение с вычитанием =) Мне больше нравятся аппаратные функции swap.
НЛО прилетело и опубликовало эту надпись здесь
Тільки для програмування це не вигідне за часом, програш пам'яті на одну змінну значно менший за програш за часом.
Із зайвою змінною виконується 3 дії, а без неї - аж 6, тобто вдвічі більше.
Та й ідея не нова.
Тому незалік. Чекаємо наступних рішень! ;)
Із зайвою змінною виконується 3 дії, а без неї - аж 6, тобто вдвічі більше.
Та й ідея не нова.
Тому незалік. Чекаємо наступних рішень! ;)
НЛО прилетело и опубликовало эту надпись здесь
Извините, постараюсь избегать далее. На такую реакцию я и ожидал. Просто это сложновато. :)
Тепер перевод сказанного.
Только для программирования это невыгодно по времени, поригрыш памяти на одну переменную значительно меньший проигрыша по времени.
С лишней переменной выполняется 3 действия, а без нее - целых 6, т.е. в два раза больше.
Да и идея не нова.
Поэтому незачет. Ждем следующих решений!
ПС. Решение с xor уже лучше, но оно вылетает в некоторых случаях, сейчвас, правда, не помню, в каких...
Тепер перевод сказанного.
Только для программирования это невыгодно по времени, поригрыш памяти на одну переменную значительно меньший проигрыша по времени.
С лишней переменной выполняется 3 действия, а без нее - целых 6, т.е. в два раза больше.
Да и идея не нова.
Поэтому незачет. Ждем следующих решений!
ПС. Решение с xor уже лучше, но оно вылетает в некоторых случаях, сейчвас, правда, не помню, в каких...
А как вы оцениваете проигрыш памяти? Почему считаете что он меньше? Программировать ведь можно не только под PC с их гигабайтами ;-)
PS пойду учить украинский.
PS пойду учить украинский.
Дерзайте, удачи! ;)
Сколько байт занимает переменная каждого типа, думаю, вы и так знаете.
А оценка хотя бы по отношению: времени в два раза меньше, а памяти больше только в полтора. :)
ПС. Я занимаюсь олимпиадным программированием, поэтому экономия времени важнее. В других сферах, возможно, по-другому.
Сколько байт занимает переменная каждого типа, думаю, вы и так знаете.
А оценка хотя бы по отношению: времени в два раза меньше, а памяти больше только в полтора. :)
ПС. Я занимаюсь олимпиадным программированием, поэтому экономия времени важнее. В других сферах, возможно, по-другому.
действительно, не стоит забывать что вы имеете дело с москалями
Как можно было догадаться писать на украинском языке на русскоязычном портале?
Такое решение прокатит только с numeric-значениями.
А к чему весь сыр-бор? Где у нас остались места, в которых нельзя втыкнуть 3-ью переменную? Разве что MK-61...
Ждал в первых комментариях вариацию на тему с использованием *,/
Был одним из тех, кто догадался как это сделать. Хотя сейчас, вещи чуть более сложные этой, порой, вызывают серьезные затруднения. :))
На уровне ассемблера вы все равно ничего не выигрываете, скорее наоборот. Для того, чтобы произвести указанную операцию, требуется минимум один свободный регистр и три операции: add, sub, sub, ну и ещё сколько-то mov.
Если же писать с третьей переменной, то вполне можно ожидать, что компилятор заметит, что третья переменная не используется больше нигде и вынесет её в регистр, а саму операцию заменит на xchg. Итого получится: загрузили одну переменную в регистр, xchg с другой переменной, записали регистр в переменную.
Так что если брать описанный способ, то он заведомо в проигрыше, так как его вряд ли оптимизируешь при недостатке памяти (а значит, и недостатке свободных регистров). Хотя несомненно, сам по себе очень интересен, и заставил задуматься и убедиться что действительно работает.
PS. Только что проверил (GCC 4.1.2). Способ с тремя переменными GCC компилирует как 4 mov используя 2 регистра, под третью переменную память не выделяется.
Описанный в статье способ: add, sub, sub, 6 штук mov. Используется 4 регистра, правда недостатка в регистрах нет.
Если же писать с третьей переменной, то вполне можно ожидать, что компилятор заметит, что третья переменная не используется больше нигде и вынесет её в регистр, а саму операцию заменит на xchg. Итого получится: загрузили одну переменную в регистр, xchg с другой переменной, записали регистр в переменную.
Так что если брать описанный способ, то он заведомо в проигрыше, так как его вряд ли оптимизируешь при недостатке памяти (а значит, и недостатке свободных регистров). Хотя несомненно, сам по себе очень интересен, и заставил задуматься и убедиться что действительно работает.
PS. Только что проверил (GCC 4.1.2). Способ с тремя переменными GCC компилирует как 4 mov используя 2 регистра, под третью переменную память не выделяется.
Описанный в статье способ: add, sub, sub, 6 штук mov. Используется 4 регистра, правда недостатка в регистрах нет.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Поменять a и b без c