# Built-in data types¶

CertSAFE has several *primitive* numeric data types that are automatically available in every project:

**IntN**: A signed two’s-complement integer type using*N*bits, where*N*is in the range 1 to 64 inclusive. For example, the type Int16 supports values from -32,768 to 32,767.**UIntN**: An unsigned integer type using*N*bits, where*N*is in the range 1 to 64 inclusive. For example, the type UInt16 supports values from 0 to 65,535.**Float32**: 32 bit floating point numbers conforming to IEEE 754.**Float64**: 64 bit floating point numbers conforming to IEEE 754.

In addition, CertSAFE’s standard library includes an enumeration data type **Boolean** which has the values `False`

and `True`

. The CertSAFE user interface offers special support for the Boolean data type in certain places, but
this type otherwise behaves like an ordinary enumeration data type except for
being automatically available in every project. The resource path of the Boolean type is `CertSAFE/Boolean/Boolean`

.

**Integer interval types** are similar to the primitive integer data types, but they span user-defined ranges instead of
fixed powers of 2. See the article on integer interval types for more
details.

## Type classes¶

A type class is a collection of data types with particular properties. A data type can be in multiple type classes. Often, a component will restrict its inputs and outputs to types in a particular type class instead of a single data type. The following type classes are built into CertSAFE:

Type class | Description | Included data types |
---|---|---|

Contains real values | Any data type whose values include a subset of the real numbers. | all primitive types and all integer interval types |

Equatable | Any data type that can have its values compared for equality. | all data types |

Fixed-size integer | Any binary integer data type whose bit size is fixed. At the moment, there are no non-fixed size binary integer
data types. Note that integer interval types are not considered to be binary integer types and are therefore
excluded from this type class. |
IntN and UIntN for all N |

Floating point | Any data type that represents floating point numbers. | Float32 and Float64 |

Has default | Any data type that has a default value. Default values are used for the initial values of One Frame Delay components that have no explicit initial value specified. For primitive data types the default value is 0. For the built-in enumeration data type |
all primitive types and the built-in Boolean type |

Integer | Any binary integer data type. Note that integer interval types are not considered to be binary integer types
and are therefore excluded from this type class. |
IntN and UIntN for all N |

Numeric | Any data type that supports arithmetic and other numeric computations. Note that integer interval types do not support arithmetic and are therefore excluded from this type class. | all primitive types |

Ordered | Any data type where an ordering is defined. Note that enumeration types do not implement this type class, so
that any order-dependent operations on them have to be explicit in a model (perhaps using a
case table). |
all primitive types and all integer interval types |

Real-valued | Any data type whose values are a subset of the real numbers. Floating point data types are included, although the
values `Infinity` , `-Infinity` , and `NaN` do not represent real numbers. |
all primitive types and all integer interval types |