Другие языки программирования и технологии

Зачем придумали процедуры inc и dec

Мне очень сложно понять смысл создания этих процедур, поэтому я решил спросить у вас)))
Во первых это не просто увеличение\уменьшение на еденицу...
Это увеличение на минмальный размер для переменной
Для байта - это 1, для типизированого указателя это размер типа, для нетипизированого это размер указателя. :)

ps
например такой код....
Type
TMyRecord = record
a:integer;
b:real;
end;
Var
p:pointer
b:^TMyRecord;
Begin
getmem(p,Sizeof(TMyRecord)*10);
b:=p;
//теперь у нас есть массив из 10 записей TMyRec;
//как обратится к пятой записи?
//Как вариант это узнать размер записи SizeOf(TMyRec) и сдвинуть указатель на 4 позиции, b:=b+sizeof(TmyRec)*4
// Но для чего такой велосипед из вызова кучи функций?)
inc(b,4); //мы пойдем по простому пути... запись делает тоже самое что и b:=b+sizeof(TmyRec)*4
b^.a; // так мы обратимся к пятой записи
end.

Это лиш один из вариантов использования, коих кстати масса) и ps. ассемблерный листинг
Var
i:integer;
begin
i:=0; //mov i,0
i:=i+1; // add i,1
inc(i) // inc i
end.
так что это даже не конструкция языка паскаль а ассемблерная команда процессора)
РН
Роман Набиев
4 069
Лучший ответ
Они выполняются быстрее, чем простое сложение с 1 и вычитание 1, так как в процессоре для увеличения и уменьшения на 1 есть особые более быстрые команды.
Для начала предположим, что Inc и Dec - стандартные функции Паскаля.

Если кратко, то 2 причины:
1. Длина строки 'Inc(i);', меньше, чем длина строки 'i:=i+1;' - код получается короче и i не встречается дважды
2. Работа с этих функций с указателями позволяет эффективнее работать с массивами данных

А теперь подробно:
Они используются для увеличения/уменьшения аргумента на константу или значение другой переменной.
Во всех известных мне типах микропроцессоров (и даже в кодах .NET) за увеличение/уменьшение на константу отвечает отдельная команда (точнее, 4 команды - увеличение на 1 и увеличение на константу, а также две - для уменьшения, но это не важно в текущем контексте) и отдельная - за изменение на значение переменной (тоже пара команд).
Все эти команды используются, когда компилятор переводит функции Inc и Dec в машинные коды. Эффективность выполнения команд (по скорости работы):
изменение на 1 <= изменение на константу <= изменение на переменную

В старых версиях компилятора на старых микропроцессорах применение Inc и Dec влияло на производительность, но сейчас разница не столь велика и оптимизатор стал значительно эффективнее.

Для увеличения/уменьшения целых чисел используются также Succ и Pred (которые увеличивают/уменьшают на 1) и транслируются в ту же команду, но между ними есть различия:
-- Inc и Dec имеют параметр - количество элементов для увеличения/уменьшения
-- Inc и Dec умеют работать с указателями, увеличивая их кратно размеру данных, на которые они указывают
с чего все взяли, что именно на единицу, если там возможно использовать два параметра, и второй указывает на величину изменения? по теме, процедуры были введены для оптимизации.
не начинай даже, не надо
Mol9Pka2011 111111
Mol9Pka2011 111111
1 786
В принципе тебе уже ответили правильно, так что могу лишь добавить к этому, что инкремент и декремент это не арифметические операции, не смотря на результат. Т. е. результат этот достигается другим путём, а именно сдвигом бит в двоичном представлении.