## Data Types — Integer Data Types

C and C++ have a number of basic data types. Each have specific uses and advantages, depending on the application.In general, the data types can be divided into two categories; Integer types and Floating Point types.

Integer types:

Name |
Size (in bits, on x86) |
Range |
Notes |

bool |
8 (top 7 bits are ignored) | 0 or 1 | C++ only |

char |
8 | -128 to 127(signed) or 0-255(unsigned) | standard issue "byte" |

short |
16 | -32768 to 32767(signed) or 0-65536(unsigned) | just like a char, only twice as large |

int |
32 | -2147483648 to 2147483647(signed) or 0-4294967296(unsigned) | standard-issue integer number type |

long |
32 (can be 64 on other architectures) | same as int |
ditto |

long long |
64 (this is a non-standard GNU extension) | -9223372036854775808 to 9223372036854775807(signed) or 0-18446744073709551616(unsigned) | For very huge integers |

Floating Point types:

Name |
Size (in bits, on x86) |
Range |
Notes |

float |
32 | +/- 1.4023x10^{-45} to 3.4028x10^{+38} |
general purpose real-number |

double |
64 | +/- 4.9406x10^{-324} to 1.7977x10^{308} |
higher-precision real number |

long double |
96 (this is a non-standard GNU extention) | ??? | For numbers with very large ranges and high precision |

Note that all Floating Point Types are

*always*signed (they can be positive or negative), while Integer Types can be either signed

*or*unsigned. Making an integer unsigned means that it is always non-negative and can count twice as high as a signed variable of the same type.

-- discuss ISO C99 sizes, as well as combinations (long char, long int, etc).