3.1 Встроенные типы данных
Стандартные встроенные типы данных — это вещественные и комплексные скаляры и матрицы, диапазоны, символьные строки, тип структуры данных и ячейковые массивы. В будущих версиях могут быть добавлены дополнительные встроенные типы данных. Если вам нужен специализированный тип данных, который в настоящее время не предоставляется как встроенный тип, рекомендуется написать свой собственный определяемый пользователем тип данных и предоставить его для распространения в будущей версии Octave.
Тип данных переменной можно определить и изменить с помощью следующих функций.
- : classname = class (obj) ¶
- : class (s, id) ¶
- : class (s, id, p, …) ¶
-
Возвращает класс объекта obj или создает класс с полями из структуры s и именем (строкой) id.
Дополнительные аргументы указывают список родительских классов, от которых происходит новый класс.
- : isa (obj, classname) ¶
-
Возвращает true, если obj является объектом класса classname.
classname также может быть одной из следующих категорий классов:
"float"-
Значение с плавающей точкой, включающее классы
"double"и"single". "integer"-
Целое число, включающее классы (u)int8, (u)int16, (u)int32, (u)int64.
"numeric"Числовое значение, представляющее либо значение с плавающей точкой, либо целое число.
Если classname является ячейковым массивом строк, возвращается логический массив того же размера, содержащий true для каждого класса, к которому принадлежит obj.
- : cast (val, "type") ¶
- : cast (val, "like", var) ¶
-
Преобразует val в тип данных type.
Входные данные val могут быть скаляром, вектором или матрицей класса, который может быть преобразован в целевой класс (см. ниже).
Если переменная var указана после
"like", val преобразуется в тот же тип данных и атрибут разреженности. Если var комплексная, val также будет комплексным.var может быть, а type может обозначать любой из следующих встроенных числовых классов:
"double" "single" "logical" "char" "int8" "int16" "int32" "int64" "uint8" "uint16" "uint32" "uint64"
Значение val может быть изменено для соответствия диапазону нового типа.
Примеры:
cast (-5, "uint8") ⇒ 0 cast (300, "int8") ⇒ 127
Примечание для программистов: эта функция полагается на то, что объект val имеет метод преобразования с именем 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 на машине с порядком байтов little-endian:
x = uint16 ([1, 65535]); typecast (x, "uint8") ⇒ [ 1, 0, 255, 255]
- : swapbytes (x) ¶
-
Меняет порядок байтов значений, преобразуя из little-endian в big-endian и наоборот.
Например:
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–2022 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/v7.2.0/Built_002din-Data-Types.html