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. В следующих разделах приведены примеры четырех различных методов:
Кастинг по подписанному назначению
Функция литья путем преобразования
Литье с помощью Fixed-Point 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 ФункцияМожно преобразовать типы данных с фиксированной и встроенной точками, не меняя базовые данные. The Fixed-Point Designer reinterpretcast функция выполняет этот тип преобразования.
В следующем примере B является беззнаковым fi объект с размером слова 8 бит и длиной дроби 5 битов. The 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Использование этого синтаксиса позволяет вам задавать типы данных отдельно от вашего алгоритмического кода, как описано в Manual Fixed-Point Conversion Лучших практик.
cast | fi | numerictype | reinterpretcast | subsasgn