3.1 Встроенные типы данных
Стандартные встроенные типы данных — это вещественные и комплексные скаляры и матрицы, диапазоны, символьные строки, тип структуры данных и ячейные массивы. Дополнительные встроенные типы данных могут быть добавлены в будущих версиях. Если вам нужен специализированный тип данных, который в настоящее время не предоставляется как встроенный тип, рекомендуется написать свой собственный тип данных и предложить его для распространения в будущей версии Octave.
Тип данных переменной можно определить и изменить с помощью следующих функций.
- : classname = class (obj) ¶
- : cls = class (s, classname) ¶
- : cls = class (s, classname, parent1, …) ¶
-
Возвращает класс объекта obj или создаёт класс с полями из структуры s и именем (строкой) classname.
Дополнительные аргументы задают список родительских классов, от которых происходит наследование нового класса.
- : tf = isa (obj, classname) ¶
-
Возвращает true, если obj является объектом класса classname.
classname также может быть одной из следующих категорий классов:
"float"-
Значение с плавающей точкой, включающее классы
"double"и"single". "integer"-
Целое значение, включающее классы (u)int8, (u)int16, (u)int32, (u)int64.
"numeric"Числовое значение, которое представляет собой либо значение с плавающей точкой, либо целое значение.
Если classname является ячейным массивом строк, возвращается логический массив того же размера, содержащий true для каждого класса, к которому принадлежит obj.
- : y = cast (x, "type") ¶
- : y = cast (x, "like", var) ¶
-
Преобразует x в тип данных type.
Входные данные x могут быть скаляром, вектором или матрицей класса, преобразуемого в целевой класс (см. ниже).
Если после
"like"указана переменная var, x преобразуется в тот же тип данных и атрибут разреженности. Если var комплексная, x также будет комплексным.var может быть, и type может называть любой из следующих встроенных числовых классов:
"double" "single" "logical" "char" "int8" "int16" "int32" "int64" "uint8" "uint16" "uint32" "uint64"
Значение x может быть изменено, чтобы соответствовать диапазону нового типа.
Примеры:
cast (-5, "uint8") ⇒ 0 cast (300, "int8") ⇒ 127
Примечание для программистов: Эта функция полагается на то, что объект x имеет метод преобразования с именем type. Пользовательские классы могут реализовывать только подмножество полного списка типов, представленного выше. В этом случае может потребоваться вызвать cast дважды, чтобы достичь желаемого типа. Например, преобразование в double почти всегда реализовано, но преобразование в uint8 может отсутствовать. В этом случае следующий код будет работать:
cast (cast (user_defined_val, "double"), "uint8")
См. также: typecast, int8, uint8, int16, uint16, int32, uint32, int64, uint64, double, single, logical, char, class, typeinfo.
- : y = typecast (x, "class") ¶
-
Возвращает новый массив y, полученный в результате интерпретации данных x в памяти как данных числового класса class.
И класс x, и class должны быть одним из встроенных числовых классов:
"logical" "char" "int8" "int16" "int32" "int64" "uint8" "uint16" "uint32" "uint64" "double" "single" "double complex" "single complex"
последние два используются только с class; они указывают, что запрашивается комплексное значение результата. Комплексные массивы хранятся в памяти как последовательные пары вещественных чисел. Размеры целочисленных типов задаются их разрядами. Логические и символьные типы обычно имеют ширину один байт; однако это не гарантируется C++. Если ваша система соответствует стандарту IEEE, типы single и double будут иметь ширину 4 байта и 8 байтов соответственно.
"logical"недопустим для class.Если входной массив — это строка, возвращаемое значение — это строка, в противном случае это столбец.
Если длина разряда x не делится на длину разряда class, возникает ошибка.
Пример использования typecast на машине с малой эндианностью:
x = uint16 ([1, 65535]); typecast (x, "uint8") ⇒ [ 1, 0, 255, 255]
- : y = swapbytes (x) ¶
-
Меняет порядок байтов значений, преобразуя их из малой эндианности в большую и наоборот.
Например:
swapbytes (uint16 (1:4)) ⇒ 256 512 768 1024
- : y = bitpack (x, class) ¶
-
Возвращает новый массив y, полученный в результате интерпретации логического массива x как необработанных битовых шаблонов для данных числового класса class.
class должен быть одним из встроенных числовых классов:
"double" "single" "double complex" "single complex" "char" "int8" "int16" "int32" "int64" "uint8" "uint16" "uint32" "uint64"
Количество элементов x должно делиться на длину бита class. Если это не так, избыточные биты отбрасываются. Бита идут в порядке возрастания значимости, т. е.,
x(1)— это бит 0,x(2)— это бит 1 и т. д.Результат — это строка, если x — это строка, в противном случае это столбец.
- : y = bitunpack (x) ¶
-
Возвращает логический массив y, соответствующий необработанным битовым шаблонам x.
x должен принадлежать одному из встроенных числовых классов:
"double" "single" "char" "int8" "int16" "int32" "int64" "uint8" "uint16" "uint32" "uint64"
Результат — это строка, если x — это строка, в противном случае это столбец.
© 1996–2023 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v8.1.0/Built_002din-Data-Types.html