Menu
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP C C++ C# AWS W3.CSS HOW TO BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS DSA TYPESCRIPT ANGULAR ANGULARJS GIT POSTGRESQL MONGODB ASP AI R GO KOTLIN SWIFT SASS VUE GEN AI SCIPY CYBERSECURITY DATA SCIENCE INTRO TO PROGRAMMING HTML & CSS BASH RUST TOOLS

C Tutorial

C HOME C Intro C Get Started C Syntax C Output C Comments C Variables C Data Types C Type Conversion C Constants C Operators C Booleans C If...Else C Switch C While Loop C For Loop C Break/Continue C Arrays C Strings C User Input C Memory Address C Pointers

C Functions

C Functions C Function Parameters C Pass By Reference C Scope C Function Declaration C Functions Challenge C Math Functions C Inline Functions C Recursion C Function Pointers

C Files

C Create Files C Write To Files C Read Files

C Structures

C Structures C Structs Challenge C Nested Structures C Arrays of Structs C Structs & Pointers C Unions C typedef C Struct Padding

C Enums

C Enums

C Memory

C Memory Management C Allocate Memory C Access Memory C Reallocate Memory C Deallocate Memory C Structs and Memory C Memory Example C Memory Mistakes

C Errors

C Errors C Error Challenge C Debugging C NULL C Error Handling C Input Validation

C Problem Solving

C Problem Solving C Build the Logic C Edge Cases & Errors C Test Cases

C More

C Date C Random Numbers C Macros C Organize Code C Storage Classes C Bitwise Operators C Fixed-width Integers C Command-Line Args

C DSA

C DSA Intro C Searching C Sorting C Stacks C Queues C Linked Lists C Trees C Hash Tables C Big O

C Projects

C Projects

C Cert

C Certificate

C Reference

C Reference C Keywords C <stdio.h> C <stdlib.h> C <string.h> C <math.h> C <ctype.h> C <time.h>

C Examples

C Examples C Real-Life Examples C Exercises C Quiz C Code Challenges C Practice Problems C Compiler C Syllabus C Study Plan C Interview Q&A

C Fixed Width Integers


Share

Fixed-Width Integers

In C, the size of int, short, and long types can vary depending on your computer and system. For example, an int might take up 2 bytes on one system, and 4 bytes on another.

To make programs behave the same everywhere, C provides fixed-width integer types in the <stdint.h> header. These types always have the same size (number of bits), no matter which computer you are on.

The most common fixed-width types are:

Type Size Range Printf Specifier
int8_t 8 bits (1 byte) -128 to 127 %d
uint8_t 8 bits (1 byte) 0 to 255 %u
int16_t 16 bits (2 bytes) -32,768 to 32,767 %d
uint16_t 16 bits (2 bytes) 0 to 65,535 %u
int32_t 32 bits (4 bytes) -2,147,483,648 to 2,147,483,647 %d
uint32_t 32 bits (4 bytes) 0 to 4,294,967,295 %u
int64_t 64 bits (8 bytes) -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 %lld
uint64_t 64 bits (8 bytes) 0 to 18,446,744,073,709,551,615 %llu

The letter u stands for unsigned, which means the type can only store non-negative values (0 and up). This doubles the maximum positive value compared to the signed version, but you lose the ability to store negative numbers.



Using Fixed-Width Integers

Example

#include <stdio.h>
#include <stdint.h>  // needed for fixed-width integers

int main() {
  int8_t a = 100;        // 8-bit integer
  int16_t b = 30000;     // 16-bit integer
  int32_t c = 2000000;   // 32-bit integer
  int64_t d = 9000000000; // 64-bit integer

  printf("%d\n", a);
  printf("%d\n", b);
  printf("%d\n", c);
  printf("%lld\n", d); // use %lld for 64-bit
  return 0;
}

Try it Yourself »

Note: The specifiers in the table work on most computers, but not on all. For example, int64_t is a long long on some systems and a long on others, so %lld can give a warning. If your code must work everywhere, use the macros from <inttypes.h>, like printf("%" PRId64 "\n", d);. PRId64 is replaced with the right letters for your system.


When to Use Fixed-Width Integers?

For most everyday programs, you don't need these types - a normal int is usually fine.

But fixed-width integers are essential when:

  • You are writing embedded systems (programs for small devices, like microcontrollers).
  • You are working with file formats where exact sizes matter.
  • You are sending data across networks and need consistent results on different machines.

Real Life Example

Imagine you are building a program that shows the battery level of a device. Since the battery percentage will always be between 0 and 100, you don't need a large type like int. Instead, you can use uint8_t, which is exactly 1 byte (8 bits) and can store values from 0 to 255:

Example

#include <stdio.h>
#include <stdint.h>

int main() {
  uint8_t battery = 87; // battery level percentage

  printf("Battery level is %u out of 100\n", battery);

  return 0;
}

Try it Yourself »

Here we save memory by using a uint8_t, which is perfect for storing values in a small, well-defined range like a battery percentage.

Note: Make sure the value always fits. A uint8_t cannot store values above 255. If battery is 255 and you add 1, it does not become 256. It wraps around and becomes 0.



Free account

Track your progress

XP earned 0 Day streak 0 Spaces 0 League —

New

Learn in Adventure Mode W3Schools Adventure App

Coding fundamentals as bite-sized lessons and challenges.

×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
sales@w3schools.com

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
help@w3schools.com

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookies and privacy policy.

Copyright 1999-2026 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.