Во Free Pascal определен ряд целых типов, различающихся между собой объемом отводимой под данные памяти. Чем больше памяти отводится, тем больший диапазон значений может принимать переменная данного типа.
На практике часто используется целочисленный тип integer, под который в зависимости от платформы отводится 2 или 4 байта.
Примеры часто используемых целых типов в Pascal
-128…127 | 1 |
-32 768…32 767 | 2 |
-2 147 483 648…2 147 483 647 | 4 |
0…255 | 1 |
0…65 535 | 2 |
Переменные целого типа могут принимать только целые значения, попытка присвоения им вещественного числа приводит к ошибке.
Целочисленные переменные в программе описываются следующим образом:
a, b, c: integer;
Здесь a , b , c — имена переменных, integer – тип переменных.
Что такое Dropbox и для чего он нужен?
Операции над целыми типами, дающие в результате значение целого типа:
Сложение |
Вычитание |
Умножение |
Целочисленное деление (остаток отбрасывается). Деление без округления (целая часть частного). |
Деление по модулю (выделение остатка от деления). Остаток от деления: a mod b = a – ((a div b) * b) . |
Пример. Пусть a = 17, b = 5. Тогда a div b дает 3, a mod b дает 2 (остаток от деления).
var a, b: integer; begin a := 17; b := 5; writeln(a div b); writeln(a mod b); end.
Операции над операндами целого типа выполняются правильно только при условии, что результат и каждый операнд не меньше минимального (крайнего левого) и не больше максимального (крайнего правого) значений диапазона. Например, в Паскале существует константа maxint, в которой содержится максимально допустимое значение для типа integer. Тогда при выполнении операций в программе должны соблюдаться следующие условия:
Над целыми типами, как и многими другими, допустимы операции отношения (сравнения). Результат таких операций относится к типу boolean и может принимать одно из двух значений – либо true (истина), либо false (ложь).
Операции отношения
Равно |
Не равно |
Больше или равно |
Больше |
Меньше или равно |
Меньше |
Целые типы могут приниматься в качестве фактических параметров рядом стандартных функций языка программирования Pascal.
Стандартные функции Pascal, применимые к аргументам целых типов
Целый | Модуль x (абсолютная величина x) |
Целый | Квадрат x |
Целый | Следующее значение x (x+1) |
Целый | Предыдущее значение x (x-1) |
Целый | Случайное целое число из интервала 0..x-1. |
Действительный | Синус x (угол в радианах) |
Действительный | Косинус x (угол в радианах) |
Действительный | Арктангенс x (угол в радианах) |
Действительный | Натуральный логарифм x |
Действительный | Экспонента x |
Действительный | Квадратный корень из x |
Логический | Значение true, если x – нечетное число; false – если четное. |
ПОЧЕМУ НЕ НАДО СТАНОВИТЬСЯ ПРОГРАММИСТОМ? | 7 жестких но правдивых минусов о которых все молчат
Функция random возвращает равномерно распределенное случайное целое число, если ей передан целый аргумент. При повторном запуске программы она возвращает те же значения. Во избежание этого следует в начале программы вызвать процедуру без параметров randomize .
Процедуры inc и dec могут иметь по одному или по два параметра целого типа (первый параметр всегда должен быть переменной, то есть число должно передаваться через переменную). Если параметров два, то значение первого увеличивается (для inc ) или уменьшается (для dec ) на величину, равную значению второго параметра. Например, inc(x, 2) равнозначно x + 2 . Если параметр один, то его значение увеличивается (для inc ) или уменьшается (для dec ) на единицу. Например, dec(x) равнозначно x-1 .
Процедуры inc и dec изменяют значение переданной в них переменной, они ничего не возвращают в программу. Это их важное отличие от функций succ и pred .
var i, j: integer; begin i := 43; inc(i); j := succ(i); writeln(‘i = ‘, i); writeln(‘j = ‘, j); dec(i, 3); j := pred(i); writeln(‘i = ‘, i); writeln(‘j = ‘, j); end.
i = 44 j = 45 i = 41 j = 40
Следующие функции принимают в качестве аргументов значения вещественного типа, а возвращают значения целого типа:
trunc(x) – отбрасывание десятичных знаков после точки;
round(x) – округление до целого.
x = 4.7389. Тогда trunc(x) дает 4, round(x) дает 5.
var x: real; begin x := 4.7389; writeln(trunc(x)); writeln(round(x )); end.
Источник: pas1.ru
Команды инкрементирования inc и декрементирования dec
Команда INC добавляет, a DEC вычитает единицу из единственного операнда. Допустимые типы операнда – такие же, как у команд ADD и SUB, а формат команд таков: inc O1 ; o1 = o1 + 1 dec O1 ; o1 = o1 — 1 Ни одна из этих инструкций не изменяет флаг CF. Увеличение на единицу значения регистра AL выглядит следующим образом: add al,l ; AL = AL + 1 inc al ; AL = AL + 1 Увеличение на единицу значения 16-битной переменной number: inc word [number] ; мы должны указать размер
9.2. Команды для работы с отрицательными числами
Система команд процессора 80386 включает в себя несколько команд, предназначенных для работы с целыми числами со знаком. Первая из них – команда NEG (negation, отрицание): NEG r/m8 NEG r/m16 NEG r/m32 Используя NEG, можно преобразовывать положительное целое число в отрицательное и наоборот. Инструкция NEG имеет только один операнд, который может быть регистром или адресом памяти.
Размер операнда – любой: 8, 16 или 32 бита. neg еах ; изменяет знак числа, сохраненного в ЕАХ neg bl ; то же самое, но используется 8-битный ; регистр BL neg byte [number] ; изменяет знак 8-битной переменной number Расширение диапазона целого беззнакового числа делалось просто: мы просто копировали число в больший регистр, а расширенное “место” заполняли нулями. При работе с целыми числами со знаком мы должны заполнить это место старшим битом преобразуемого числа.
Так мы можем сохранять положительные и отрицательные числа при расширении их диапазона. Расширение диапазона числа со знаком называется знаковым расширением. Процессор имеет несколько специальных команд, предназначенных для знакового расширения. Эти команды не имеют операндов, они выполняют действия над фиксированными регистрами.
Команда CBW Команда CBW копирует седьмой (старший) бит регистра AL в регистр АН, расширяя таким образом оригинальное значение регистра AL в значение со знаком регистра АХ (значение АН становится равно 0x00 или 0xFF = 11111111b, в зависимости от старшего бита AL). Команда CWDE Команда CWDE копирует старший бит АХ в верхнюю часть (старшую часть) ЕАХ, расширяя таким образом оригинальное значение АХ в двойное слово со знаком, которое будет помещено в регистр ЕАХ. Команда CWD Команда CWD копирует старший бит АХ в регистр DX, расширяя таким образом оригинальное значение АХ в пару регистров со знаком DX:AX. Команда CDQ Команда CDQ копирует старший бит ЕАХ в регистр EDX, расширяя таким образом оригинальное значение ЕАХ в пару регистров со знаком EDX:EAX. ; переменной – word
9.3. Арифметические команды умножения и деления
Дополнительный код делает возможным сложение и вычитание целых чисел со знаком и без знака с помощью одних и тех же команд ADD и SUB. Но к умножению и делению это не относится: умножение выполняется командой MUL, а деление – командой DIV. Для умножения и деления чисел со знаком служат отдельные команды – IMUL и IDIV.
Операнды этих инструкций такие же, как у MUL и DIV. Операции умножения и деления имеют свою специфику. В результате умножения двух чисел мы можем получить число, диапазон которого будет в два раза превышать диапазон операндов. Деление целых чисел – это операция целочисленная, поэтому в результате образуются два значения: частное и остаток.
С целью упрощения реализации команд умножения и деления эти команды спроектированы так, что один из операндов и результат находятся в фиксированном регистре, а второй операнд указывается программистом. Подобно командам ADD и SUB, команды MUL, DIV, IMUL, IDIV изменяют регистр признаков.
Источник: studfile.net
Инструкция INC
Команда INC в Ассемблере увеличивает число на единицу. Синтаксис:
Состояние флагов зависит от результата выполнения команды. Значение флага CF при этом не изменяется. В этом и заключается основное отличие инструкции INC от вызова команды ADD ЧИСЛО, 1 (в этом случае флаг CF может быть изменён).
ЧИСЛО может быть одним из следующих:
- Область памяти (MEM)
- Регистр общего назначения (REG)
Что такое инкремент
Инкремент — это увеличение числа на какое-то значение (обычно на единицу). Что касается команды INC, то она увеличивает число именно на единицу. Алгоритм такой:
ЧИСЛО = ЧИСЛО + 1
В языках высокого уровня существуют процедуры, которые могут выполнять уменьшение не только на единицу, но и на другое заданное число (подробнее об этом см. здесь).
Где используется команда INC
Эту команду можно использовать, разумеется, при необходимости увеличить число на единицу. А такая необходимость может возникнуть, например, при организации циклов или таймеров/счётчиков. То есть по большей части эта команда используется в тех же случаях, что и инструкция DEC.
Пример
.model tiny .code ORG 100h start: MOV AL, 1 ;Поместить в AL число 1 INC AL ;Увеличить AL на единицу END start
А теперь о происхождении мнемоники INC. Это сокращение от английского слова INCREMENT, которое произошло от латинского слова INCREMENTUM (приращение, прибыль).
Источник: av-assembler.ru