---
title:  CSCI 1301 -- Datatypes in C#
author: Clément Aubert
lang: en
fontsize: 10pt
documentclass: scrartcl
numbersections: true
links-as-notes: true
papersize: letter
geometry: margin=1in
keywords:
- Computer Science
- Problem solving methods
- Syllabus
- Augusta University
- Bachelor of Science
---

# Value Types

## Numeric

### Signed Integer

| Type | Range  | Size |
| :---: | :-----------: | :---: |
| `sbyte`  | -128 to 127  | Signed 8-bit integer |
| `short`  | -32,768 to 32,767  | Signed 16-bit integer |
| `int`  | -2,147,483,648 to 2,147,483,647  | Signed 32-bit integer |
| `long`  | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807  | Signed 64-bit integer |

<!--
Larger integers can be represented with `BigInteger` (<https://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx>).
-->

### Unsigned Integer

|Type | Range  | Size |
| :---: | :---: | :---: |
| `byte`  | 0 to 255  | Unsigned 8-bit integer |
| `ushort`  | 0 to 65,535  | Unsigned 16-bit integer |
| `uint`  | 0 to 4,294,967,295  | Unsigned 32-bit integer |
| `ulong`  | 0 to 18,446,744,073,709,551,615  | Unsigned 64-bit integer |

### Floating-point Numbers

| Type | Approximate Range | Precision | 
| :---: | :-----: | :---: |
| `float` | ±1.5e−45 to ±3.4e38 | 7 digits|
| `double` | ±5.0e−324 to ±1.7e308 | 15--16 digits|
| `decimal` | (-7.9 x 1028 to 7.9 x 1028)/(100 to 1028) | 28--29 significant digits |

## Logical

| Type | Possible Values  | Size |
| :---: | :---: | :---: |
| `bool`  |  `true`, `false`  | 8-bit |

## Character

| Type | Range  | Size |
| :---: | :---: | :---: |
| `char`  | U+0000  to U+ffff | Unicode 16-bit character |

# Literals

| Name | Corresponding datatype | Examples | 
| :---: | :---: |  :---: | 
| Integer Literal |  `int` | `40`, `-39`, `291838`, `0`, … | 
| Float Litteral | `float` | `3.5F`, `-43.5f`, `309430.70006F`, … |
| Double Literal | `double` | `28.98`, `239.0`, `-391.089`, `0.0`, … |
| Decimal Literal | `decimal` | `8.95m`, `3283.9M`, `-30m`, … |
| Boolean Literal | `bool` | `true`, `false` |
| Character Literal | `char` | ` 'Y' `, `'a'`, `'0'`, `'\n'`, `'\x0058'`, `'\u0058'`, … |

<!--
Hexadecimal and unicode
-->

# Compatibility

| | **Integer Litteral** | **Float Litteral** | **Double Litteral** | **Decimal Litteral** | 
| ---: | :---: |  :---: |  :---: |  :---: | 
| **`int`**    | $✓$ | ✘ | ✘ | ✘ |
| **`float` **   | $✓$ | $✓$ | ✘ | ✘ |
| **`double` **  | $✓$ | $✓$ | $✓$ | ✘ |
| **`decimal` ** | $✓$ | $✓$ | $✓$ | $✓$ |

# Result Type of Operations

<!--
| Type of One Operand | Type of the Other Operand | Type of Result |
| :---: |  :---: |  :---: | 
| `int` | `int` | `int` |
| `double` | `double` | `double` |
| `decimal` | `decimal` | `decimal` |
| `int` | `double` | `double` |
| `int` | `decimal` | `decimal` |
| `double` | `decimal` | `decimal` |
-->

|           | **`int`** | **`float`** | **`double`** | **`decimal`** |
| ---: |  :---: |  :---: | :---: |  :---: | 
| **`int`**     | `int` | `float` | `double` | `decimal` |
| **`float`**   | `float` | `float` | `double` | illegal |
| **`double`**  | `double` | `double` | `double` | illegal |
| **`decimal`** | `decimal` | illegal | illegal | `decimal` |


# References {-}

- <https://docs.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/types-and-variables>
- <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/integral-types-table>
- <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/floating-point-types-table>
- <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/value-types-table>
- <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/implicit-numeric-conversions-table>
- <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/explicit-numeric-conversions-table>

<!--
- <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/sizeof>
- <http://zetcode.com/lang/csharp/datatypes/>
- <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/decimal>

-->
