grimgav
↑ так меня зовут, а это я говорю →
Просто гламурный
Проректор
Карма: +161/-17
Offline
Пол: Награды:
Сообщений: 4636
не ^i^
|
|
« Ответ #20 : Февраль 09, 2007, 04:20:24 » |
|
|
|
|
Записан
|
· Я русский ·
|
|
|
vimmax
Модератор
Декан
Карма: +42/-3
Offline
Пол: Награды:
Сообщений: 1713
♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
|
|
« Ответ #21 : Февраль 09, 2007, 04:54:05 » |
|
BODROV - Ответ#19 - та время засекать не надо. Просто писать в виде кода достаточно.
Данный ответ не зависит от величины переменной, т.е. скорость проверки будет одинаковой как для 4, так и для 1024. Но в моем ответе всего 3 операции. а в твоем ((x-1) xor x) = ((x shl 1)-1) - 5 операций.
Надо еще минимизировать.
|
|
|
Записан
|
♪♪ ♫ LET FOREVER BE ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
|
|
|
Sochin
Злой модератор
Декан
Карма: +108/-6
Offline
Пол:
Сообщений: 1518
|
|
« Ответ #22 : Февраль 09, 2007, 05:17:09 » |
|
а для BODROV - Ответ#19 - та время засекать не надо. Просто писать в виде кода достаточно.
Данный ответ не зависит от величины переменной, т.е. скорость проверки будет одинаковой как для 4, так и для 1024. Но в моем ответе всего 3 операции.
А для 2^(10^1024)? )))
|
|
|
Записан
|
Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил... 壯鎭
|
|
|
BODROV
Mодератор
Доцент
Карма: +37/-1
Offline
Пол:
Сообщений: 550
хде я?
|
|
« Ответ #23 : Февраль 09, 2007, 05:30:23 » |
|
хух.... кажись родил..... (x and (x-1)) = 0
|
|
|
Записан
|
|
|
|
vimmax
Модератор
Декан
Карма: +42/-3
Offline
Пол: Награды:
Сообщений: 1713
♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
|
|
« Ответ #24 : Февраль 09, 2007, 06:08:20 » |
|
BODROV - Ответ #23 -> ну родил так родил!!! отлично, правильный ответ. BODROV +1.
только мой вариант C, но это то же самое: #define isPower2(x) ( !( (x) & ((x)-1) ) )
Так'с, теперь когда известен правильный ответ, будем обсуждать вопрос о скорости выполнения этого кода для различных типов данных и различных величин?
|
|
|
Записан
|
♪♪ ♫ LET FOREVER BE ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
|
|
|
Tuomas
Магистр
Карма: +8/-0
Offline
Пол: Награды:
Сообщений: 290
Радиофинн
|
|
« Ответ #25 : Февраль 09, 2007, 07:57:43 » |
|
Сначала укажите область практического применения данного примера
|
|
|
Записан
|
-Жизнь всегда такая жестокая? Или только когда маленький? -Она всегда жестокая... Платок можешь оставить себе.
|
|
|
Alder
|
|
« Ответ #26 : Февраль 09, 2007, 08:46:25 » |
|
Сначала укажите область практического применения данного примера
Да где угодно,но особенно такая эффективность нужна при программировании для микроконтроллеров (ИМХО)
|
|
|
Записан
|
"There are things known and there are things unknown, and in between are the doors..." (Jim Morrison)
|
|
|
Storm
Верховный
Администратор
Аспирант
Карма: +29/-0
Offline
Пол:
Сообщений: 484
|
|
« Ответ #27 : Февраль 09, 2007, 08:55:35 » |
|
BODROV - Ответ #23 -> ну родил так родил!!! отлично, правильный ответ. BODROV +1.
только мой вариант C, но это то же самое: #define isPower2(x) ( !( (x) & ((x)-1) ) )
Так'с, теперь когда известен правильный ответ, будем обсуждать вопрос о скорости выполнения этого кода для различных типов данных и различных величин?
Как говорится, классика... На ассемблер это развернется в хз скоко команд в зависимости от разрядности используемого процессора и разрядности переменной х. ЗЫ: Есть хорошая книга "Алгоритмические трюки для программистов", там большая часть таких изгибов ума разобрана от и до.
|
|
|
Записан
|
Только две вещи бесконечны: вселенная и тупость, и я еще не уверен по поводу вселенной. (Альберт Эйнштейн) ---------------------------------------------------- "There are two major products that came out of Berkeley: LSD and UNIX. We don't believe this to be a coincidence." (с) Jeremy S. Anderson
Проходит ирландец мимо паба....
|
|
|
vimmax
Модератор
Декан
Карма: +42/-3
Offline
Пол: Награды:
Сообщений: 1713
♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
|
|
« Ответ #28 : Февраль 12, 2007, 10:49:56 » |
|
Правильно сказал Alder, данная эффективность и прочие похожие трюки подходят при embedded программировании для контроллеров и мобильных систем.
Но не все знают, что подобные трюки любят спрашивать программисты при собеседовании на работу. Так что, советую всегда хранить в голове.
|
|
|
Записан
|
♪♪ ♫ LET FOREVER BE ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
|
|
|
Sochin
Злой модератор
Декан
Карма: +108/-6
Offline
Пол:
Сообщений: 1518
|
|
« Ответ #29 : Февраль 12, 2007, 11:11:26 » |
|
А еще, также возможно не все знают, что множество дефайнов по сути - это источник проблем, так как не осуществляется никакой проверки типов/параметров и при достаточно большом размере проекта множество дефайнов делают развитие проекта непредсказуемым. Вобщем, фтопку дефайны как и оператор goto.
|
|
|
Записан
|
Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил... 壯鎭
|
|
|
vimmax
Модератор
Декан
Карма: +42/-3
Offline
Пол: Награды:
Сообщений: 1713
♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
|
|
« Ответ #30 : Февраль 12, 2007, 11:30:52 » |
|
Вобщем, фтопку дефайны как и оператор goto.
Нельзя так резко отзываться об инструментах программирования. В ANSI C нет понятия inline функций, поэтому использование #define макроса вместо функции экономит стековую память и скорость вызова (за счет макроподстановки).
|
|
|
Записан
|
♪♪ ♫ LET FOREVER BE ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
|
|
|
Sochin
Злой модератор
Декан
Карма: +108/-6
Offline
Пол:
Сообщений: 1518
|
|
« Ответ #31 : Февраль 12, 2007, 11:34:56 » |
|
Нельзя так резко отзываться об инструментах программирования. В ANSI C нет понятия inline функций, поэтому использование #define макроса вместо функции экономит стековую память и скорость вызова (за счет макроподстановки).
Я же написал для проектов достаточно большого размера и сложности. Для простеньких программ - ради Бога, как и вышеупомянутый оператор, справедливо раскритикованный много лет назад одним из уважаемых профи.
|
|
|
Записан
|
Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил... 壯鎭
|
|
|
vimmax
Модератор
Декан
Карма: +42/-3
Offline
Пол: Награды:
Сообщений: 1713
♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
|
|
« Ответ #32 : Февраль 12, 2007, 11:44:34 » |
|
Sochin - а что для тебя есть "проектов достаточно большого размера и сложности" ? Например проект из 231 исходника для гигабитного маршрутизатора MARVELL серии ExMxPm является достаточно большим и сложным? (кстати, он еще в продажу не поступил) Я думаю ты бы не обрадовался если бы маршрутизатор твоей сети работал на 5% медленнее, чем сейчас
|
|
|
Записан
|
♪♪ ♫ LET FOREVER BE ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
|
|
|
Tuomas
Магистр
Карма: +8/-0
Offline
Пол: Награды:
Сообщений: 290
Радиофинн
|
|
« Ответ #33 : Февраль 12, 2007, 03:10:15 » |
|
действительно, от goto уже многие отказались, и скоро, я думаю, этот оператор канет в Лету.
|
|
|
Записан
|
-Жизнь всегда такая жестокая? Или только когда маленький? -Она всегда жестокая... Платок можешь оставить себе.
|
|
|
mars
Магистр
Карма: +10/-0
OfflineНаграды:
Сообщений: 221
|
|
« Ответ #34 : Март 03, 2007, 12:23:36 » |
|
BODROV - Ответ #23 -> ну родил так родил!!! отлично, правильный ответ. BODROV +1.
только мой вариант C, но это то же самое: #define isPower2(x) ( !( (x) & ((x)-1) ) )
Так'с, теперь когда известен правильный ответ, будем обсуждать вопрос о скорости выполнения этого кода для различных типов данных и различных величин?
Хороший ответ если исключить 0. al = х = 0 -> 00000000b bl = x-1=-1 -> 11111111b al and bl = 00000000b но 0 не является степенью 2.
|
|
|
Записан
|
Мне говорили: «Ты злой», и я соглашался. Мне говорили: «Ты не злой», и я не находил возражений. Сам-то я не хотел ни добра, ни зла и даже не думал об этом. Я просто шел своим Путем, а люди потом подбирали названия для моих поступков. М.Симонс
|
|
|
BODROV
Mодератор
Доцент
Карма: +37/-1
Offline
Пол:
Сообщений: 550
хде я?
|
|
« Ответ #35 : Март 03, 2007, 12:31:13 » |
|
но 0 не является степенью 2.
ээээээ, а разве 0 2 != 0 ?
|
|
|
Записан
|
|
|
|
Sochin
Злой модератор
Декан
Карма: +108/-6
Offline
Пол:
Сообщений: 1518
|
|
« Ответ #36 : Март 03, 2007, 12:34:18 » |
|
ээээээ, а разве 02 != 0 ?
Это квадрат нуля, а не степень двойки. )
|
|
|
Записан
|
Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил... 壯鎭
|
|
|
BODROV
Mодератор
Доцент
Карма: +37/-1
Offline
Пол:
Сообщений: 550
хде я?
|
|
« Ответ #37 : Март 03, 2007, 12:42:18 » |
|
Это квадрат нуля, а не степень двойки. )
да, протупил!
|
|
|
Записан
|
|
|
|
mars
Магистр
Карма: +10/-0
OfflineНаграды:
Сообщений: 221
|
|
« Ответ #38 : Март 03, 2007, 01:41:48 » |
|
Хотелось бы первый + ))
|
|
|
Записан
|
Мне говорили: «Ты злой», и я соглашался. Мне говорили: «Ты не злой», и я не находил возражений. Сам-то я не хотел ни добра, ни зла и даже не думал об этом. Я просто шел своим Путем, а люди потом подбирали названия для моих поступков. М.Симонс
|
|
|
Storm
Верховный
Администратор
Аспирант
Карма: +29/-0
Offline
Пол:
Сообщений: 484
|
|
« Ответ #39 : Март 03, 2007, 10:36:50 » |
|
действительно, от goto уже многие отказались, и скоро, я думаю, этот оператор канет в Лету.
в ЯВУ отказались, в Ассемблере он как был, так никуда не делся и не денется.... ибо в линейной памяти джамп замены не имеет...
|
|
|
Записан
|
Только две вещи бесконечны: вселенная и тупость, и я еще не уверен по поводу вселенной. (Альберт Эйнштейн) ---------------------------------------------------- "There are two major products that came out of Berkeley: LSD and UNIX. We don't believe this to be a coincidence." (с) Jeremy S. Anderson
Проходит ирландец мимо паба....
|
|
|
|