Difference between revisions of "Byte/ru"

From Lazarus wiki
Jump to navigationJump to search
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
 
{{Byte}}
 
{{Byte}}
  
Тип <syntaxhighlight lang="pascal" enclose="none">byte</syntaxhighlight> (байт)  является беззнаковым [[Integer/ru|<syntaxhighlight lang="pascal" enclose="none">integer</syntaxhighlight>]] (целым) типом, представляющим значения в диапазоне <syntaxhighlight lang="pascal" enclose="none">0..255</syntaxhighlight> и занимающим '''8 бит'''. Типы <syntaxhighlight lang="pascal" enclose="none">byte</syntaxhighlight> и [[Char/ru|<syntaxhighlight lang="pascal" enclose="none">char</syntaxhighlight>]]  являются одним и тем же в [[FPC]] версии 3.
+
Тип <syntaxhighlight lang="pascal" inline>byte</syntaxhighlight> (байт)  является беззнаковым [[Integer/ru|<syntaxhighlight lang="pascal" inline>integer</syntaxhighlight>]] (целым) типом, представляющим значения в диапазоне <syntaxhighlight lang="pascal" inline>0..255</syntaxhighlight> и занимающим '''8 бит'''. Типы <syntaxhighlight lang="pascal" inline>byte</syntaxhighlight> и [[Char/ru|<syntaxhighlight lang="pascal" inline>char</syntaxhighlight>]]  являются одним и тем же в [[FPC]] версии 3.
  
 
== Корректные значения ==
 
== Корректные значения ==
Ключевое отличие состоит в том, что <syntaxhighlight lang="pascal" enclose="none">byte</syntaxhighlight> может использоваться только в качестве числового [[Type/ru|<syntaxhighlight lang="pascal" enclose="none">type</syntaxhighlight>]](типа), тогда как <syntaxhighlight lang="pascal" enclose="none">char</syntaxhighlight> может использоваться как символ или как часть строкового типа и не может использоваться в арифметическом выражении. <syntaxhighlight lang="pascal" enclose="none">byte</syntaxhighlight> всегда будет иметь тот же размер, что и [[AnsiChar/ru|<syntaxhighlight lang="pascal" enclose="none">ansiChar</syntaxhighlight>]], но в будущем <syntaxhighlight lang="pascal" enclose="none">char</syntaxhighlight> может считаться синонимом [[WideChar|<syntaxhighlight lang="pascal" enclose="none">wideChar</syntaxhighlight>]], а не [[AnsiChar/ru|<syntaxhighlight lang="pascal" enclose="none">ansiChar</syntaxhighlight>]].
+
Ключевое отличие состоит в том, что <syntaxhighlight lang="pascal" inline>byte</syntaxhighlight> может использоваться только в качестве числового [[Type/ru|<syntaxhighlight lang="pascal" inline>type</syntaxhighlight>]](типа), тогда как <syntaxhighlight lang="pascal" inline>char</syntaxhighlight> может использоваться как символ или как часть строкового типа и не может использоваться в арифметическом выражении. <syntaxhighlight lang="pascal" inline>byte</syntaxhighlight> всегда будет иметь тот же размер, что и [[AnsiChar/ru|<syntaxhighlight lang="pascal" inline>ansiChar</syntaxhighlight>]], но в будущем <syntaxhighlight lang="pascal" inline>char</syntaxhighlight> может считаться синонимом [[WideChar|<syntaxhighlight lang="pascal" inline>wideChar</syntaxhighlight>]], а не [[AnsiChar/ru|<syntaxhighlight lang="pascal" inline>ansiChar</syntaxhighlight>]].
  
 
Например:
 
Например:
Line 17: Line 17:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Использование типов данных <syntaxhighlight lang="pascal" enclose="none">byte</syntaxhighlight> или <syntaxhighlight lang="pascal" enclose="none">byte</syntaxhighlight> обеспечивает лучшую документированность при работе с конкретными переменными.
+
Использование типов данных <syntaxhighlight lang="pascal" inline>byte</syntaxhighlight> или <syntaxhighlight lang="pascal" inline>byte</syntaxhighlight> обеспечивает лучшую документированность при работе с конкретными переменными.
  
 
== Стандартные функции ==
 
== Стандартные функции ==
 
=== Преобразование в символ и из него ===
 
=== Преобразование в символ и из него ===
  
Тип <syntaxhighlight lang="pascal" enclose="none">byte</syntaxhighlight> может быть [[coercion|приведен]] к типу <syntaxhighlight lang="pascal" enclose="none">char</syntaxhighlight> с помощью [[Chr/ru|функции <syntaxhighlight lang="pascal" enclose="none">chr</syntaxhighlight>]]. Значения типа <syntaxhighlight lang="pascal" enclose="none">chr</syntaxhighlight> могут быть приведены к типу <syntaxhighlight lang="pascal" enclose="none">byte</syntaxhighlight> с помощью [[Ord/ru|функции <syntaxhighlight lang="pascal" enclose="none">ord</syntaxhighlight>]].
+
Тип <syntaxhighlight lang="pascal" inline>byte</syntaxhighlight> может быть [[coercion|приведен]] к типу <syntaxhighlight lang="pascal" inline>char</syntaxhighlight> с помощью [[Chr/ru|функции <syntaxhighlight lang="pascal" inline>chr</syntaxhighlight>]]. Значения типа <syntaxhighlight lang="pascal" inline>chr</syntaxhighlight> могут быть приведены к типу <syntaxhighlight lang="pascal" inline>byte</syntaxhighlight> с помощью [[Ord/ru|функции <syntaxhighlight lang="pascal" inline>ord</syntaxhighlight>]].
  
 
Исправленный вариант приведенной выше программы:
 
Исправленный вариант приведенной выше программы:
Line 51: Line 51:
 
=== Строковое представление ===
 
=== Строковое представление ===
  
Функция [[doc:rtl/strutils/inttobin.html|IntToBin]] из модуля [[doc:rtl/strutils/index-5.html|StrUtils]] может использоваться для получения строки, отображающей  [[Binary_numeral_system/ru|двоичное представление]] байта:
+
Функцию {{Doc|package=RTL|unit=system|identifier=binstr|text=<syntaxhighlight lang="pascal" inline>binStr</syntaxhighlight> function}} из модуля [[System unit|<syntaxhighlight lang="pascal" inline>system</syntaxhighlight>]] можно использовать для получения [[String/ru|<syntaxhighlight lang="pascal" inline>string</syntaxhighlight>]] (строки), показывающей [[Binary_numeral_system/ru|двоичное представление]] <syntaxhighlight lang="pascal" inline>byte</syntaxhighlight>:
  
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
uses StrUtils;
+
program binStrDemo(input, output, stderr);
  
 
var
 
var
  a_byte : Byte = 10;
+
foo: byte;
  
 
begin
 
begin
  Writeln(IntToBin(a_byte,8));
+
foo := 10;
 +
writeLn(binStr(foo, 8));
 
end.
 
end.
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
Выведет:
 
Выведет:
 +
<syntaxhighlight lang="text">
 +
00001010
 +
</syntaxhighlight>
  
'''00001010'''
+
Более универсальной функцией является {{Doc|package=RTL|unit=strutils|identifier=inttobin|text=<syntaxhighlight lang="pascal" inline>intToBin</syntaxhighlight>}}, предоставляемая модулем <syntaxhighlight lang="pascal" inline>strUtils</syntaxhighlight>.
 
{{Data types/ru}}
 
{{Data types/ru}}

Latest revision as of 17:22, 6 August 2022

Deutsch (de) English (en) español (es) suomi (fi) français (fr) italiano (it) русский (ru) 中文(中国大陆)‎ (zh_CN)

Тип byte (байт) является беззнаковым integer (целым) типом, представляющим значения в диапазоне 0..255 и занимающим 8 бит. Типы byte и char являются одним и тем же в FPC версии 3.

Корректные значения

Ключевое отличие состоит в том, что byte может использоваться только в качестве числового type(типа), тогда как char может использоваться как символ или как часть строкового типа и не может использоваться в арифметическом выражении. byte всегда будет иметь тот же размер, что и ansiChar, но в будущем char может считаться синонимом wideChar, а не ansiChar.

Например:

var 
  c: byte; 
  ch: char;
begin
  c := 65;  ch := 'A';  { одинаковые и допустимые действия }
  c := 'A'; ch := 65;   { в то время как эти действия также одинаковы, но недопустимы }
end.

Использование типов данных byte или byte обеспечивает лучшую документированность при работе с конкретными переменными.

Стандартные функции

Преобразование в символ и из него

Тип byte может быть приведен к типу char с помощью функции chr. Значения типа chr могут быть приведены к типу byte с помощью функции ord.

Исправленный вариант приведенной выше программы:

program ordChrDemo(input, output, stderr);
var
  foo: byte;
  bar: char;

begin
  foo := 65;
  bar := 'A';
	
  foo := ord('A');
  // chr(65) это эквивалент #65
  bar := chr(65);
  bar := #65;
	
  // альтернатива: приведения типов
  // приведения типов константных выражений
  // гарантированно произойдет во время компиляции
  foo := byte('A');
  bar := char(65);
end.

Строковое представление

Функцию binStr function из модуля system можно использовать для получения string (строки), показывающей двоичное представление byte:

program binStrDemo(input, output, stderr);

var
	foo: byte;

begin
	foo := 10;
	writeLn(binStr(foo, 8));
end.

Выведет:

00001010

Более универсальной функцией является intToBin, предоставляемая модулем strUtils.

Типы данных
Простые типы Boolean | Byte | Cardinal | Char | Currency | Extended | Int64 | Integer | Longint | Pointer | Real | Shortint | Smallint | Word
Сложные типы Array | Class | Record | Set | String | Shortstring