## Types

## Primitive data types

Primitive data type are the building blocks of which other more complex types are derived from. Each primitive type has the following 3 attributes:

1. **Type:** Indicates the name for the type
2. **Width:** How many bits it takes up
3. **Intended interpretation:** How it should be interpreted

### Integral types

| Type | Width | Intended interpretation |
|-|-|-|
| byte | 8 | signed byte (two's complement) |
| ubyte | 8 | unsigned byte |
| short | 16| signed short (two's complement) |
| ushort | 16 | unsigned short |
| int | 32 | signed int (two's complement) |
| uint | 32 | unsigned int |
| long | 64 | signed long (two's complement) |
| ulong | 64 | unsigned long |


#### Conversion rules

1. TODO: Sign/zero extension
2. Promotion?
3. Precedence in interpretation when the first two don't apply

### Decimal

TODO: Add this

* float32, float64 etc

#### Conversion rules

TODO: Add this