C++ Decimal to Binary Conversion

Beginner
6 min read
Updated: Oct 2026
2 programs
Live preview

What Is Decimal to Binary Conversion?

Decimal (base 10) is the everyday number system. Binary (base 2) uses only bits 0 and 1. Conversion means rewriting a decimal integer as a string of bits.

Remember
Divide by 2 → remainder is the next bit (LSB first)
Reverse the remainders → MSB … LSB binary string

Example: 13
  13 ÷ 2 = 6 rem 1
   6 ÷ 2 = 3 rem 0
   3 ÷ 2 = 1 rem 1
   1 ÷ 2 = 0 rem 1
  Remainders (LSB→MSB): 1 0 1 1
  Binary (MSB→LSB):     1101
DecimalBinaryCheck
00special case
1311018+4+1
4210101032+8+2

How to Convert Decimal to Binary in C++

Four clear steps — then pick a remainder loop or std::bitset.

  1. Handle n == 0 by returning "0".
  2. While n > 0, record n % 2 and set n = n / 2.
  3. Reverse the collected remainders (or build the string from the front).
  4. Or use std::bitset and trim leading zeros for a short answer.
MethodIdeaTimeBest for
Remainder loopDivide by 2; reverse remaindersO(log n)Interviews, learning place values
std::bitsetFixed-width bits, then trim zerosO(1) width / O(log n) trimProduction code, short answers

Pseudocode

Pseudocode
function DecimalToBinary(n):
    if n == 0:
        return "0"

    bits = empty list
    while n > 0:
        bits.append(n mod 2)
        n = n / 2

    reverse bits
    return join(bits)

Cheat Sheet

Keep these facts handy while writing the program.

TopicDetail
OperationDivide by 2; remainder is a bit
First remainderLSB (rightmost bit)
ZeroReturn "0" — do not skip
Built-instd::bitset<32>(n).to_string()
NegativesUsually restrict to n >= 0 in tutorials
Classic check13 → 1101

Live Preview

Enter a nonnegative integer to see the remainder steps and the binary result.

Nonnegative integers (capped at 2147483647). Tap a chip or type a value.

Result
n = 13
Remainders (LSB first): 1, 0, 1, 1
Binary = 1101

Worked Walkthrough — n = 13

Divide by 2 until the quotient is 0. Collect remainders, then reverse.

Calculation
13 ÷ 2 = 6  remainder 1   ← LSB
 6 ÷ 2 = 3  remainder 0
 3 ÷ 2 = 1  remainder 1
 1 ÷ 2 = 0  remainder 1   ← MSB

Remainders collected: 1 0 1 1
Reversed binary:      1 1 0 1  →  1101

Check: 8 + 4 + 0 + 1 = 13

C++ Programs

Start with the remainder loop so you can explain every bit. Then use std::bitset for a short library-style answer.

Example 1 — Remainder Loop

Collect n % 2 values, then reverse them into a binary string.

C++
#include <iostream>
#include <string>
#include <vector>
#include <stdexcept>

std::string decimalToBinary(int n) {
    if (n < 0) {
        throw std::invalid_argument("Use a nonnegative integer.");
    }
    if (n == 0) {
        return "0";
    }

    std::vector<char> bits;
    while (n > 0) {
        bits.push_back(static_cast<char>('0' + (n % 2)));
        n /= 2;
    }

    std::string result;
    for (int i = static_cast<int>(bits.size()) - 1; i >= 0; i--) {
        result += bits[i];
    }
    return result;
}

int main() {
    int number = 13;
    std::cout << number << " → " << decimalToBinary(number) << "\n";
    return 0;
}

How It Works

  1. Reject negatives for this beginner version; return "0" immediately when n is zero.
  2. Each n % 2 is the next bit from the right (LSB first).
  3. n /= 2 shifts toward higher bits until the quotient becomes 0.
  4. Append bits from the end of the vector so the string reads MSB to LSB.
  5. For 13, remainders 1,0,1,1 reverse to 1101.

Example 2 — std::bitset

Build a fixed-width bit string, then drop leading zeros for a minimal form.

C++
#include <iostream>
#include <string>
#include <bitset>
#include <stdexcept>

std::string decimalToBinary(int n) {
    if (n < 0) {
        throw std::invalid_argument("Use a nonnegative integer.");
    }
    if (n == 0) {
        return "0";
    }

    std::string bits = std::bitset<32>(static_cast<unsigned int>(n)).to_string();
    std::size_t firstOne = bits.find('1');
    return bits.substr(firstOne);
}

int main() {
    std::cout << decimalToBinary(13) << "\n"; // 1101
    std::cout << decimalToBinary(42) << "\n"; // 101010
    std::cout << decimalToBinary(0) << "\n";  // 0
    return 0;
}

How It Works

  1. Keep the same nonnegative rule as the manual method.
  2. std::bitset<32>(n).to_string() writes a 32-character bit string.
  3. find('1') locates the first significant bit; substr drops leading zeros.
  4. Zero is handled separately so you do not return an empty string.
  5. Use the loop in interviews when you must show the math; use bitset in real projects.

Edge Cases & Pitfalls

Check these before calling the solution done.

n = 0

Return "0"

A bare while (n > 0) loop produces an empty string otherwise.

Reverse

LSB comes first

Printing remainders in collection order yields the bits backwards.

Negatives

Define the policy

Tutorials usually require n >= 0. Two’s complement needs a fixed width.

Width

Minimal vs padded

Default output drops leading zeros. Pad only when the problem asks for 8/16/32 bits.

Time and Space Complexity

ProgramTimeExtra space
Remainder loopO(log n)O(log n) for the bit list
std::bitsetO(1) width / O(log n) trimO(1) fixed width + result string

Key Takeaways

  • Method: divide by 2; remainders are bits (LSB first).
  • Reverse: print from last remainder to first for normal binary.
  • Library: std::bitset after you know the algorithm.
  • Test set: 0 → 0; 13 → 1101; 42 → 101010.

One line: collect n % 2 remainders and reverse them — or use std::bitset and trim zeros.

Frequently Asked Questions

Repeatedly divide by 2 and collect remainders (LSB first), then reverse them — or use std::bitset and trim leading zeros for nonnegative integers.
The first remainder is the least significant bit. Printing from last remainder to first gives the usual left-to-right binary string.
Handle n == 0 separately and return "0". A while (n > 0) loop would otherwise produce an empty string.
It stores a fixed-width binary representation. to_string() gives all bits; trim leading zeros for a minimal form.
Both methods are O(b), where b is the number of output bits — about O(log n) for positive n.

Next: Decimal to Octal

Convert a base-10 integer into base 8 with divide-by-8 remainders.

Decimal to octal tutorial →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

6 people found this page helpful