Бывает ли программный код без операторов ветвления (совсем) может известны какие то программы. Циклы можно, но без ветвления (if). Вопрос конечно теоретический но мне всегда было интересно.
Циклы можно, но без ветвления (if).
Гхм, циклы без ветвления (проверки условия) в студию.
да не я имел ввиду код без if циклы то другое.
В любом цикле есть проверка условий, что есть операция ветвления по сути.
Хеллоуворлд — да. Программы — нет.
1 Ассемблер ARM, можно писать без прямого ветвления, за счет суффиксов добавляемых к инструкциям. Эти суффиксы заставляют инструкции выполняться только при опрелеленных условиях.
2
while (a>b) { a = a*b; break; }Вместо
if (a>b) { a = a*b; }И вперед.
Но ТС не в курсе, что этот код в результате исполняет абсолютно идентичные команды.
int test(int a, int b){ while (a>b) { a = a*b; break; } return a; } int test2(int a, int b){ if (a>b) { a = a*b; } return a; }test(int, int): push rbp mov rbp, rsp mov DWORD PTR [rbp-4], edi mov DWORD PTR [rbp-8], esi nop mov eax, DWORD PTR [rbp-4] cmp eax, DWORD PTR [rbp-8] jle .L3 mov eax, DWORD PTR [rbp-4] imul eax, DWORD PTR [rbp-8] mov DWORD PTR [rbp-4], eax nop .L3: mov eax, DWORD PTR [rbp-4] pop rbp ret test2(int, int): push rbp mov rbp, rsp mov DWORD PTR [rbp-4], edi mov DWORD PTR [rbp-8], esi mov eax, DWORD PTR [rbp-4] cmp eax, DWORD PTR [rbp-8] jle .L7 mov eax, DWORD PTR [rbp-4] imul eax, DWORD PTR [rbp-8] mov DWORD PTR [rbp-4], eax .L7: mov eax, DWORD PTR [rbp-4] pop rbp retЕссесно. А ещё спрашивают, зачем надо учить ассемблер.
Вот, @Holger, тут ветвление компилятор реализовал через прыжок jle на метку, а в ARM ассемблере прыжка бы не требовалось, там просто суффиксом саму операцию a*b сделали бы условно выполняющейся.
while (a>b)
Это тоже условие.
Человек четко написал - циклы можно, if нельзя. Конец цитаты.
Вопросы какие
Человек четко написал - циклы можно, if нельзя. Конец цитаты.
Это другое, это надо понимать.
это цикл с условием. как в питухоне например while true это бесконечный будет цикл
Так тут все равно есть условие.
Любой цикл имеет условие by design, если это не в ассемблере.
Ну в одном из языков есть такой цикл повторить n раз без всяких while
Ну в одном из языков есть такой цикл повторить n раз без всяких while
Ты почитай букварь какой, в самом то деле.
Повторить n раз - это цикл for, есть в любом языке, даже в нативном коде. И “повторить n раз” это УСЛОВИЕ, прикинь.
У вас что там, информатики в школе не было
в том языке помнится нет for а какого хрена надо еще лишние переменные задействовать для цикла?
В машинном коде, если это конечно не какой то экзотический процессор, нет for, do, loop и прочей заloop. В нём есть только if и jmp.
Что бы ты не написал осмысленного (имеющего практический смысл) на языке высокого уровня, компилятор сгенерирует код с условными переходами.
Циклы for хороши для перебора значений массива. А в остальном… [code=python] a = [9, 20, 4] for x in a: print (x) [/code]
как то так
Ну строго говоря, можно бесконечный цикл запилить на безусловном переходе.
а потом выходить из него, переписывая указатель, куда прыгать
Или не выходить
Хорошо, но допустим вариант программулины которая делает запись в системный реестр винды. Вот ей то нахрена ветвления?
Всмысле нахрена? Типа перед записью наличие узла, в который ты пишешь проверять не надо?
Так он по любому есть. И потом не будет записи нужной будет ошибка и вот и ее не надо обрабатывать.
Да, не надо, я в своем коде особо проверок не делаю.
Оно и заметно
Хорошо, но допустим вариант программулины которая делает запись в системный реестр винды. Вот ей то нахрена ветвления?
Догадываешься ли ты, что вызываемая для этой цели функция содержит операторы ветвления?
какие такие нужны операторы ветвления если надо получить текущую дату или unixtime?
какие такие нужны операторы ветвления если надо получить текущую дату или unixtime?
Если учитываются часовые пояса и реформы времени, то придётся в цикле сравнивать значения со списком.
Или программулина выводящая дату или количество прожитых дней врядли ветвления тут нужны.
Для GPU пишут так чтоб не было ветвлений, из-за особенностей исполнения SIMT. Гуглится по словам “simt wavefront”.
Ну еще при Data-oriented design.






