Приведение 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

Вы можете найти полезным приведение данных в другой тип - например, когда вы приводите данные от аккумулятора в память. Существует несколько способов привести данные в 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 Лучших практик.

См. также

| | | |