Skip to content

Instantly share code, notes, and snippets.

@thiagoh
Last active April 30, 2017 23:10
Show Gist options
  • Save thiagoh/19494ff8f706813876989b04c82f357e to your computer and use it in GitHub Desktop.
Save thiagoh/19494ff8f706813876989b04c82f357e to your computer and use it in GitHub Desktop.
C Data Types - Handbook

C Data Types - Handbook

Table of Contents

C/C++ provides various data types that can be used in your programs.

In general, you'd commonly use:

  • int for most variables and "countable" things (for loop counts, variables, events)
  • char for characters and strings
  • float for general measurable things (seconds, distance, temperature)
  • uint32_t for bit manipulations, especially on 32-bit registers
  • The appropriate stdint.h types for storing and working with data explicitly at the bit level

Integer Data Types¶

C type stdint.h type Bits Sign Range
char uint8_t 8 Unsigned 0 .. 255
signed char int8_t 8 Signed -128 .. 127
unsigned short uint16_t 16 Unsigned 0 .. 65,535
short int16_t 16 Signed -32,768 .. 32,767
unsigned int uint32_t 32 Unsigned 0 .. 4,294,967,295
int int32_t 32 Signed -2,147,483,648 .. 2,147,483,647
unsigned long long uint64_t 64 Unsigned 0 .. 18,446,744,073,709,551,615
long long int64_t 64 Signed -9,223,372,036,854,775,808 .. 9,223,372,036,854,775,807

Floating Point Data Types¶

C type IEE754 Name Bits Range
float Single Precision 32 -3.4E38 .. 3.4E38
double Double Precision 64 -1.7E308 .. 1.7E308

Pointers¶

The ARMv7-M architecture used in mbed microcontrollers is a 32-bit architecture, so standard C pointers are 32-bits.

Notes¶

Whilst most types are signed by default (short, int, long long), char is unsigned by default.

Because the natural data-size for an ARM processor is 32-bits, it is much more preferable to use int as a variable than short; the processor may actually have to use more instructions to do a calculation on a short than an int!

In code ported from other platforms, especially 8-bit or 16-bit platforms, the data types may have had different sizes. For example, int may have been represented as 16-bits. If this size has been relied on, some of the code may need updating to make it more portable. In addition, it is quite common that programmers will have defined their own types (UINT8, s8, BYTE, WORD, ..); it is probably beter to convert this to the stdint.h types, which will be naturally portable across platforms.

Other Reference¶


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment