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: 0
B = 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