Integer/ru: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: Integer/ru
| Old | New | Line | |
|---|---|---|---|
| 1 | + | **Integer** является [[Standard type/ru|стандартным типом данных]] языка программирования [[Pascal]]. Он используется для определения целых чисел, в отличие от типа [[Real/ru|real]], применяющегося для представления вещественных чисел, которые могут содержать десятичную точку и, возможно, экспоненту. | |
| 2 | + | ||
| 3 | + | Размер переменных типа **integer** зависит от размера машинных слов на целевой платформе, для которой компилятор генерирует код ([[32 bit]] или [[64 bit]]) и типа [[Compiler|компилятора]] (16-битный, 32-битный или 64-битный). Типичные размеры типа **integer** | |
| 4 | + | ||
| 5 | + | - 16 бит (2 байта) | |
| 6 | + | - 32 бита (4 байта) или | |
| 7 | + | - 64 бита (8 байта) | |
| 8 | + | ||
| 9 | + | На текущий момент FPC использует 32 бита (4 байта) для типа **integer**, независимо от того, является ли архитектура машины 32-битной или 64-битной. Это приведет к тому, что в коде ожидается одинаковый размер типа **integer** и указателя на него, и на машинах с 64-битной архитектурой, использующих 64-битные указатели, данный код работать не будет. Для того, что бы вы могли писать переносимый код, в модуле System FPC введены типы [[PtrInt/ru|PtrInt]] и [[PtrUInt/ru|PtrUInt]], являющиеся, соответственно, знаковым и беззнаковым типами данных указателей, имеющие одинаковые размеры с типом **integer**. | |
| 10 | + | ||
| 11 | + | В старых версиях компиляторов тип **integer** был 16-битным и представлял значения от -2<sup>15</sup> до 2<sup>15</sup>-1 или -32 768 .. 32 767. Аналогичный тип данных [[Word/ru|word]] иногда использовался для определения беззнакового целого типа (0..65 535). В таких случаях, где компилятор использовал 16-битный целый тип, 32-битные целые числа обычно выражались с помощью [[Data type/ru|типов данных]] [[Long/ru|long]] или [[Longint/ru|longint]]. | |
| 12 | + | ||
| 13 | + | Для машин с архитектурой x86 тип **integer** обычно определяется как 32-битный и включает значения в диапазоне от -2<sup>31</sup> до 2<sup>31</sup>-1 или -2 147 483 648 .. 2 147 483 647. Последнее значение также определено в качестве константы [[maxint/ru|MAXINT]]. Беззнаковый 32-битный целый тип [[Cardinal/ru|cardinal]] имеет значения в диапазоне от 0 до 2<sup>32</sup>-1 или 0 .. 4 294 967 295. | |
| 14 | + | ||
| 15 | + | В настоящий момент тип **integer** зависит только от режима компиляции (`$mode`), поэтому на современных 64-битных процессорах тип **integer** также 16-битный в режимах [[Mode TP/ru|TP]] или [[Mode FPC/ru|FPC]] либо 32-битный в режимах [[Mode ObjFPC/ru|ObjFPC]] или [[Mode Delphi/ru|Delphi]]. | |
| 16 | + | ||
| 17 | + | Для 64-битных вычислений FPC поддерживает 64-битный тип [[Int64/ru|Int64]], который может принимать значения от -2<sup>63</sup> до 2<sup>63</sup>-1 или -9 223 372 036 854 775 808 ... 9 223 372 036 854 775 807. | |
| 18 | + | ||
| 19 | + | --- | |
| 20 | + | *From the Free Pascal wiki, page "Integer/ru", as it stood on 2018-02-10 after a change by Useroflazarus, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
