fi ОбъектыПоскольку программное обеспечение MATLAB ® не имеет описаний типов, назначение подобноA = B заменяет тип и содержимое A с типом и содержанием B. Если A не существует во время присвоения, MATLAB создает переменную A и присваивает ему тот же тип и значение, что и B. Такое присвоение происходит со всеми типами в MATLAB - объектами и встроенными типами - включая fi, double, single, int8, uint8, int16и т.д.
Например, следующий код перезаписывает значение и int8 тип A со значением и int16 тип B:
A = int8(0); B = int16(32767); A = B
A = int16 32767
class(A)
ans =
'int16'Возможно, будет полезно перевести данные в другой тип - например, при передаче данных из накопителя в память. Существует несколько способов приведения данных в MATLAB. В следующих разделах приведены примеры четырех различных методов:
Кастинг по назначению с подстрочными индексами
Функция литья по преобразованию
Отливка с помощью Designer™ с фиксированной точкой reinterpretcast функция
Отливка с помощью cast Функция
Следующая инструкция назначения под индексом сохраняет тип A и насыщает значение B в int8:
A = int8(0); B = int16(32767); A(:) = B
A = int8 127
class(A)
ans =
'int8'То же самое верно для fi объекты:
fipref('NumericTypeDisplay', 'short'); A = fi(0, 1, 8, 0); B = fi(32767, 1, 16, 0); A(:) = B
A =
127
numerictype(1,8,0)Примечание
Дополнительные сведения о назначениях с подстрочными индексами см. в разделе subsasgn функция.
Можно преобразовать один тип данных в другой с помощью функции преобразования. В этом примере: A не обязательно должен быть предопределен, поскольку он перезаписан.
B = int16(32767); A = int8(B)
A = int8 127
class(A)
ans =
'int8'То же самое верно для fi объекты:
B = fi(32767,1,16,0) A = fi(B,1,8,0)
B =
32767
numerictype(1,16,0)
A =
127
numerictype(1,8,0)numerictype Объект в fi Функция преобразованияЧасто специфический numerictype используется во многих местах, и его удобно предопределять numerictype для использования в функциях преобразования. Предварительное определение этих объектов является хорошей практикой, поскольку оно также помещает спецификацию типа данных в одно место.
T8 = numerictype(1,8,0) T16 = numerictype(1,16,0)
T8 =
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 8
FractionLength: 0
T16 =
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 0B = fi(32767,T16) A = fi(B,T8)
B =
32767
numerictype(1,16,0)
A =
127
numerictype(1,8,0)reinterpretcast ФункцияМожно преобразовать типы данных с фиксированной точкой и встроенные типы данных без изменения базовых данных. Конструктор фиксированных точек reinterpretcast функция выполняет этот тип преобразования.
В следующем примере: B является неподписанным fi объект с длиной слова 8 бит и длиной дроби 5 бит. reinterpretcast функция преобразует B в подписанный fi объект A с длиной слова 8 бит и длиной дроби 1 бит. Реальные ценности A и B отличаются, но их двоичные представления одинаковы.
B = fi([pi/4 1 pi/2 4],0,8,5) T = numerictype(1,8,1); A = reinterpretcast(B,T)
B =
0.7813 1.0000 1.5625 4.0000
DataTypeMode: Fixed-point: binary point scaling
Signedness: Unsigned
WordLength: 8
FractionLength: 5
A =
12.5000 16.0000 25.0000 -64.0000
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 8
FractionLength: 1Чтобы убедиться, что базовые данные не изменились, сравните двоичные представления A и B:
binary_B = bin(B) binary_A = bin(A)
binary_B =
'00011001 00100000 00110010 10000000'
binary_A =
'00011001 00100000 00110010 10000000'Использование cast функция, можно преобразовать значение переменной в то же самое numerictype, сложность и fimath в качестве другой переменной.
В следующем примере: a приводится к типу данных b. Выходные данные, c, имеет то же самое numerictype и fimath свойства как bи значение a.
a = pi; b = fi([],1,16,13,'RoundingMethod','Floor'); c = cast(a,'like',b)
c =
3.1415
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 13
RoundingMethod: Floor
OverflowAction: Saturate
ProductMode: FullPrecision
SumMode: FullPrecisionЭтот синтаксис позволяет задавать типы данных отдельно от алгоритмического кода, как описано в разделе Рекомендации по преобразованию фиксированных точек вручную.
cast | fi | numerictype | reinterpretcast | subsasgn