Integer Datatype in C++

Well integer is one of the fundamental data types provided by the C++ language.

What is an Integer Data Type?

The integer data type is used to represent whole numbers (i.e., numbers without fractional or decimal components). In programming languages like C++, integers are represented in binary format, consisting of sequences of 0s and 1s. This binary representation allows the computer to store and manipulate integer values directly.

Key Characteristics:

  • No fractional part: Integers only represent whole numbers.
  • Fixed size: Integers have a fixed size (in bits), which determines their range and storage requirements.
  • Binary representation: Stored as a sequence of binary digits (bits), where each bit represents a power of 2.

Types of Integer Data Types in C++

C++ provides multiple integer data types to accommodate different sizes and ranges of values. The most common are:

Data TypeSize (in bytes)Range (Signed)Range (Unsigned)
char1-128 to 1270 to 255
short2-32,768 to 32,7670 to 65,535
int4-2,147,483,648 to 2,147,483,6470 to 4,294,967,295
long4 or 8Depends on architectureDepends on architecture
long long8-9,223,372,036,854,775,808 to 9,223,372,036,854,775,8070 to 18,446,744,073,709,551,615

Explanation of Each:

1️⃣ char:

  • Primarily used to store characters, but under the hood, it’s a small integer.
  • Size: 1 byte (8 bits).
  • Signed: Can represent values from  −128 to 127 .
  • Unsigned: Can represent values from 0 to 255 .
  • Used for small integer values or character representation (ASCII).

2️⃣ short:

  • Typically used when memory is constrained and smaller ranges are sufficient.
  • Size: 2 bytes (16 bits).
  • Signed: Range from  −32,768 to 32,767 .
  • Unsigned: Range from 0 to 65,535 .
  • Suitable for scenarios where large numbers aren’t needed.

3️⃣ int:

  • The most commonly used integer type.
  • Size: 4 bytes (32 bits) on most systems.
  • Signed: Range from −2,147,483,648 to 2,147,483,647 .
  • Unsigned: Range from 0 to 4,294,967,295 .
  • Typically used when no specific size requirements are mentioned.

4️⃣ long:

  • Larger than int, though its size varies between platforms (4 bytes on 32-bit systems, 8 bytes on 64-bit systems).
  • Signed: Range depends on the architecture.
  • Unsigned: Same as signed but starting from zero.
  • Suitable for large values where int might not be sufficient.

5️⃣ long long:

  • Designed for very large integer values.
  • Size: 8 bytes (64 bits).
  • Signed: Range from −9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 .
  • Unsigned: Range from 0 to 18,446,744,073,709,551,615 .
  • Used when extremely large numbers are needed.

Signed vs. Unsigned Integers

  • Signed integers: Can store both positive and negative values.
    • By default, all integers types in C/C++ are signed, meaning they can hold both negative and positive values.
    • These can store both positive and negative numbers, including zero. The leftmost bit is reserved for indicating the sign (0 for positive, 1 for negative).
  • Unsigned integers: Only store non-negative values (positive numbers and zero), which effectively doubles the upper range.
    • These can only hold non-negative values (zero and positive numbers). They are used when you know the values will never be negative, allowing a larger positive range.
    • These can store only non-negative numbers. Since no bit is used for the sign, the entire bit range is used for the magnitude, effectively doubling the maximum value compared to a signed integer.

Binary Representation:

  • Signed integers use the most significant bit (MSB) as a sign bit:
    • 0: Represents a positive number.
    • 1: Represents a negative number.
  • Unsigned integers don’t reserve a sign bit, so all bits are used for the value itself.

Range Calculation

The range of an integer depends on the number of bits used to store the value:

For a signed type:

  • Total number of values = 2^n, where n is the number of bits.
  • Range: -(2^(n-1)) to (2^(n-1) - 1)

For example, a 16-bit signed integer (short int) has:

  • Negative range: -(2^(16-1)) = -32,768
  • Positive range: (2^(16-1)) - 1 = 32,767

For an unsigned type:

  • Total number of values = 2^n
  • Range: 0 to (2^n - 1)

For example, a 16-bit unsigned integer has:

  • Range: 0 to 65,535 (since 2^16 = 65,536).