Binary (base 2) uses only bits 0 and 1. Decimal (base 10) is the everyday number system. Conversion means reading each bit as a power of two and summing the contributions of every 1.
Remember
Rightmost bit = 2⁰ (value 1)
Next bit = 2¹ (value 2)
Next bit = 2² (value 4)
…
Example: 101010
1×32 + 0×16 + 1×8 + 0×4 + 1×2 + 0×1 = 42
Binary
Place values used
Decimal
1010
8 + 2
10
1111
8 + 4 + 2 + 1
15
101010
32 + 8 + 2
42
Approach
How to Convert Binary to Decimal in C
Four clear steps — then pick a manual loop or strtol.
Read the binary string (only 0 and 1 allowed).
Validate every character before converting.
Sum place values (right-to-left), or call strtol(bits, NULL, 2).
Print or return the decimal result.
Method
Idea
Time
Best for
Place-value loop
Walk right-to-left; add 2^power for each 1
O(k)
Interviews, learning place values
strtol(s, NULL, 2)
Parse the string as base 2 in one call
O(k)
Production code, short answers
Pseudocode
Pseudocode
function BinaryToDecimal(bits):
if bits is empty:
reject input
decimal = 0
power = 1 // 2⁰
for i from length(bits) - 1 down to 0:
ch = bits[i]
if ch is not '0' and not '1':
reject input
if ch == '1':
decimal = decimal + power
power = power * 2
return decimal
Reference
Cheat Sheet
Keep these facts handy while writing the program.
Topic
Detail
Valid bits
Only 0 and 1
Place values
1, 2, 4, 8, 16, 32, 64, 128, …
Start side
Rightmost bit = 2⁰
Library call
strtol(bits, NULL, 2)
Longer strings
strtoll(bits, NULL, 2)
Classic check
101010 → 42
Try it
Live Preview
Enter a binary string to see place values and the decimal result.
Digits 0 and 1 only (up to 31 bits). Tap a chip or type a value.
Result
Binary = 101010
Places = 32 + 8 + 2
Decimal = 42
Trace
Worked Walkthrough — 101010
Start at the right. Multiply each bit by its place value, then add the non-zero terms.
Start with the place-value loop so you can explain every step. Then use strtol for a short library-based answer.
Example 1 — Place-Value Loop
Walk the string from right to left. Double the place value after each bit.
C
#include <stdio.h>
#include <string.h>
long binary_to_decimal(const char *bits)
{
int len = (int)strlen(bits);
long decimal_value = 0;
long power = 1;
int i;
if (len == 0)
{
return -1; /* empty input */
}
for (i = len - 1; i >= 0; i--)
{
if (bits[i] != '0' && bits[i] != '1')
{
return -1; /* invalid character */
}
if (bits[i] == '1')
{
decimal_value += power;
}
power *= 2;
}
return decimal_value;
}
int main(void)
{
const char *binary = "101010";
long result = binary_to_decimal(binary);
if (result < 0)
{
printf("Invalid binary string.\n");
}
else
{
printf("%s -> %ld\n", binary, result);
}
return 0;
}
Output
101010 -> 42
How It Works
Reject an empty string before any math begins (return -1).
Start at the rightmost bit with power = 1 (that is 20).
For each character, accept only '0' or '1'; anything else returns -1.
If the bit is '1', add the current power to decimal_value. A '0' adds nothing.
Double power (*= 2) and move one position left. Repeat until the first character.
Trace — 101010
bit 0 → power 1 → skip (0)
bit 1 → power 2 → add 2
bit 0 → power 4 → skip
bit 1 → power 8 → add 8
bit 0 → power 16 → skip
bit 1 → power 32 → add 32
total = 2 + 8 + 32 = 42
Example 2 — strtol Base 2
Validate the bits, then let the C library parse the string as base 2.
C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int is_binary(const char *bits)
{
int i;
if (bits == NULL || bits[0] == '\0')
{
return 0;
}
for (i = 0; bits[i] != '\0'; i++)
{
if (bits[i] != '0' && bits[i] != '1')
{
return 0;
}
}
return 1;
}
long binary_to_decimal(const char *bits)
{
if (!is_binary(bits))
{
return -1;
}
return strtol(bits, NULL, 2);
}
int main(void)
{
printf("%ld\n", binary_to_decimal("101010")); /* 42 */
printf("%ld\n", binary_to_decimal("1111")); /* 15 */
return 0;
}
Output
42
15
How It Works
is_binary rejects empty strings and any character outside 0/1.
strtol(bits, NULL, 2) parses the string as a base-2 number.
The third argument 2 means “treat this string as binary.”
The function returns a decimal long (for example "101010" → 42).
Use the manual loop in interviews when you must show place values; use strtol in real code.
Edge Cases & Pitfalls
Check these before calling the solution done.
Empty
Reject empty input
Return an error sentinel — never convert silently.
0 / 1 only
Validate every character
2, spaces, or letters make the string invalid for binary conversion.
Leading 0
Still valid
00101 equals 5. Leading zeros do not change the value.
Overflow
Watch type limits
Prefer long / strtoll for longer bit strings; reject inputs that exceed your type.
Analysis
Time and Space Complexity
Program
Time
Extra space
Place-value loop
O(k)
O(1)
strtol(s, NULL, 2)
O(k)
O(1)
k is the number of bits in the input string.
Remember
Key Takeaways
Place values: rightmost bit is 2⁰; only 1-bits add to the total.
Validate first: reject empty strings and any character outside 0/1.
Two options: manual place-value loop, or strtol(s, NULL, 2).
Test set:101010 → 42; 1111 → 15; 0 → 0.
One line: sum powers of two for each 1-bit — or call strtol(bits, NULL, 2).
Frequently Asked Questions
Sum powers of two for each 1-bit, or call strtol(bits, NULL, 2). Both turn a base-2 string into a base-10 integer.
It parses string s as a base-2 number and returns a long. Use strtoll for longer bit strings.
Binary may contain only 0 and 1. Validation avoids wrong answers and silent parse failures.
No. Strings like 00101 are valid and equal 5 in decimal.
Both the manual loop and strtol are O(k), where k is the number of bits. Extra space is O(1) beyond the input.