Main Content

`fi`

ObjectsBecause MATLAB^{®} software does not have type declarations, an assignment like
`A = B`

replaces the type and content of `A`

with the type and content of `B`

. If `A`

does not
exist at the time of the assignment, MATLAB creates the variable `A`

and assigns it the same type
and value as `B`

. Such assignment happens with all types in
MATLAB — objects and built-in types alike — including
`fi`

, `double`

, `single`

,
`int8`

, `uint8`

, `int16`

,
etc.

For example, the following code overwrites the value and `int8`

type of `A`

with the value and `int16`

type of
`B`

:

A = int8(0); B = int16(32767); A = B

A = int16 32767

class(A)

ans = 'int16'

You may find it useful to cast data into another type—for example, when you are casting data from an accumulator to memory. There are several ways to cast data in MATLAB. The following sections provide examples of four different methods:

Casting by Subscripted Assignment

Casting by Conversion Function

Casting with the Fixed-Point Designer™

`reinterpretcast`

functionCasting with the

`cast`

Function

The following subscripted assignment statement retains the type of
`A`

and saturates the value of `B`

to an
`int8`

:

A = int8(0); B = int16(32767); A(:) = B

A = int8 127

class(A)

ans = 'int8'

The same is true for `fi`

objects:

fipref('NumericTypeDisplay', 'short'); A = fi(0, 1, 8, 0); B = fi(32767, 1, 16, 0); A(:) = B

A = 127 numerictype(1,8,0)

**Note**

For more information on subscripted assignments, see the `subsasgn`

function.

You can convert from one data type to another by using a conversion function.
In this example, `A`

does not have to be predefined because it
is overwritten.

B = int16(32767); A = int8(B)

A = int8 127

class(A)

ans = 'int8'

The same is true for `fi`

objects:

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`

Object in the `fi`

Conversion FunctionOften a specific `numerictype`

is used in many places, and it
is convenient to predefine `numerictype`

objects for use in the
conversion functions. Predefining these objects is a good practice because it
also puts the data type specification in one place.

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`

FunctionYou can convert fixed-point and built-in data types without changing the
underlying data. The Fixed-Point Designer
`reinterpretcast`

function
performs this type of conversion.

In the following example, `B`

is an unsigned
`fi`

object with a word length of 8 bits and a fraction
length of 5 bits. The `reinterpretcast`

function converts
`B`

into a signed `fi`

object
`A`

with a word length of 8 bits and a fraction length of 1
bit. The real-world values of `A`

and `B`

differ, but their binary representations are the same.

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

To verify that the underlying data has not changed, compare the binary
representations of `A`

and `B`

:

binary_B = bin(B) binary_A = bin(A)

binary_B = '00011001 00100000 00110010 10000000' binary_A = '00011001 00100000 00110010 10000000'

Using the `cast`

function, you can
convert the value of a variable to the same `numerictype`

,
complexity, and `fimath`

as another variable.

In the following example, `a`

is cast to the data type of
`b`

. The output, `c`

, has the same
`numerictype`

and `fimath`

properties as
`b`

, and the value of `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

Using this syntax allows you to specify data types separately from your algorithmic code as described in Manual Fixed-Point Conversion Best Practices.

`cast`

| `fi`

| `numerictype`

| `reinterpretcast`

| `subsasgn`