Skip to content

Integer Overflow

When you define a variable in C specific amount of space is allocated to store that data in memory , a variable defined as int data type in C will occupy 4 bytes of space

C declaration Bytes
Signed Unsigned 32bit 64bit
char unsigned char 1 1
short unsigned short 2 2
int unsigned int 4 4
long unsigned long 4 8
char * 4 8
flat 4 4
double 8 8

You can't assign values which take more space to store in memory. When you try to do that an overflow will occure , and the overflowed bits will be ignored.

1
2
3
4
5
6
7
8
9
#include <stdio.h>


void main()
{
  unsigned int integer = 4294967295;

  printf("%d",integer+1);
}

Try running the above code .

Rather than showing 4294967296 , which is the expected result the program printed 0 . This happed because . integer variable is declared as a unsigned integer and the range of values which can be stored in 4 bytes of space is 0 - 0xffffffff (2 ** 32 -1 ). Thus adding one will cause an overflow ( 1 + 0xffffffff = 0x100000000 ) and the extra bit will be ignored and the result becomes 0

1
2
3
4
5
6
7
8
9
  11111111111111111111111111111111           : 0xffffffff ( 4294967295 ) 
    +                            1
----------------------------------
 100000000000000000000000000000000
 ^^                              |
 ||                              |
 |--------------------------------
 |         32 bit ( 4 bytes )
 Overflow
C data type byte range
int 4 -2147483648 - 0 - 2147483647
unsigned int 4 0 - 4294967295