Byte/ru: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: Byte/ru
| Old | New | Line | |
|---|---|---|---|
| 1 | + | Тип `byte` (байт) является беззнаковым [[Integer/ru|integer]] (целым) типом, представляющим значения в диапазоне `0..255` и занимающим **8 бит**. Типы `byte` и [[Char/ru|char]] являются одним и тем же в [[FPC]] версии 3. | |
| 2 | + | ||
| 3 | + | ## Корректные значения | |
| 4 | + | ||
| 5 | + | Ключевое отличие состоит в том, что `byte` может использоваться только в качестве числового [[Type/ru|type]](типа), тогда как `char` может использоваться как символ или как часть строкового типа и не может использоваться в арифметическом выражении. `byte` всегда будет иметь тот же размер, что и [[AnsiChar/ru|ansiChar]], но в будущем `char` может считаться синонимом [[WideChar|wideChar]], а не [[AnsiChar/ru|ansiChar]]. | |
| 6 | + | ||
| 7 | + | Например: | |
| 8 | + | ||
| 9 | + | ``` pascal | |
| 10 | + | var | |
| 11 | + | c: byte; | |
| 12 | + | ch: char; | |
| 13 | + | begin | |
| 14 | + | c := 65; ch := 'A'; { одинаковые и допустимые действия } | |
| 15 | + | c := 'A'; ch := 65; { в то время как эти действия также одинаковы, но недопустимы } | |
| 16 | + | end. | |
| 17 | + | ``` | |
| 18 | + | ||
| 19 | + | Использование типов данных `byte` или `byte` обеспечивает лучшую документированность при работе с конкретными переменными. | |
| 20 | + | ||
| 21 | + | ## Стандартные функции | |
| 22 | + | ||
| 23 | + | ### Преобразование в символ и из него | |
| 24 | + | ||
| 25 | + | Тип `byte` может быть [[coercion|приведен]] к типу `char` с помощью [[Chr/ru|функции chr]]. Значения типа `chr` могут быть приведены к типу `byte` с помощью [[Ord/ru|функции ord]]. | |
| 26 | + | ||
| 27 | + | Исправленный вариант приведенной выше программы: | |
| 28 | + | ||
| 29 | + | ``` pascal | |
| 30 | + | program ordChrDemo(input, output, stderr); | |
| 31 | + | var | |
| 32 | + | foo: byte; | |
| 33 | + | bar: char; | |
| 34 | + | ||
| 35 | + | begin | |
| 36 | + | foo := 65; | |
| 37 | + | bar := 'A'; | |
| 38 | + | ||
| 39 | + | foo := ord('A'); | |
| 40 | + | // chr(65) это эквивалент #65 | |
| 41 | + | bar := chr(65); | |
| 42 | + | bar := #65; | |
| 43 | + | ||
| 44 | + | // альтернатива: приведения типов | |
| 45 | + | // приведения типов константных выражений | |
| 46 | + | // гарантированно произойдет во время компиляции | |
| 47 | + | foo := byte('A'); | |
| 48 | + | bar := char(65); | |
| 49 | + | end. | |
| 50 | + | ``` | |
| 51 | + | ||
| 52 | + | ### Строковое представление | |
| 53 | + | ||
| 54 | + | Функцию [`binStr` function](https://www.freepascal.org/docs-html/rtl/system/binstr.html) из модуля [[System unit|system]] можно использовать для получения [[String/ru|string]] (строки), показывающей [[Binary numeral system/ru|двоичное представление]] `byte`: | |
| 55 | + | ||
| 56 | + | ``` pascal | |
| 57 | + | program binStrDemo(input, output, stderr); | |
| 58 | + | ||
| 59 | + | var | |
| 60 | + | foo: byte; | |
| 61 | + | ||
| 62 | + | begin | |
| 63 | + | foo := 10; | |
| 64 | + | writeLn(binStr(foo, 8)); | |
| 65 | + | end. | |
| 66 | + | ``` | |
| 67 | + | ||
| 68 | + | Выведет: | |
| 69 | + | ||
| 70 | + | ```text | |
| 71 | + | 00001010 | |
| 72 | + | ``` | |
| 73 | + | ||
| 74 | + | Более универсальной функцией является [`intToBin`](https://www.freepascal.org/docs-html/rtl/strutils/inttobin.html), предоставляемая модулем `strUtils`. | |
| 75 | + | ||
| 76 | + | --- | |
| 77 | + | *From the Free Pascal wiki, page "Byte/ru", as it stood on 2022-08-06 after a change by Kai Burghardt, 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).* |
