exponenta event banner

Бросок 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. В следующих разделах приведены примеры четырех различных методов:

  • Кастинг по назначению с подстрочными индексами

  • Функция литья по преобразованию

  • Отливка с помощью 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 Функция

Можно преобразовать типы данных с фиксированной точкой и встроенные типы данных без изменения базовых данных. Конструктор фиксированных точек 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

Этот синтаксис позволяет задавать типы данных отдельно от алгоритмического кода, как описано в разделе Рекомендации по преобразованию фиксированных точек вручную.

См. также

| | | |