The idea behind converting a binary string to a decimal number is as below Starting with the least significant (rightmost) bit we multiple each binary digit with the power of 2 starting with 0. As we move towards the most significant (leftmost) bit we increase the power of 2 by 1. The resultant decimal number is the addition of all the multiplications. Example : Binary string (0110) resultant decimal = 0 * 23 + 1 * 22 + 1 * 21 + 0 * 20 resultant decimal = 6
Optimized algorithm : Binary to decimal conversion 1) Initialize the equivalent decimal number i.e the result to 0. 2) For each position of the binary digit starting with the leftmost digit do : result = (result * 2) + current binary digit (i.e 0 or 1). 3) result is the equivalent decimal number.
Example : Consider a binary string : [ 0 1 1 0 ]
Bit Position | Bit | Intermediate Result (Result * 2) + Current Bit | Result |
---|---|---|---|
0 (leftmost) | 0 | 0 * 2 + 0 | 0 |
1 | 1 | 0 * 2 + 1 | 1 |
2 | 1 | 1 * 2 + 1 | 3 |
3 (rightmost) | 0 | 3 * 2 + 0 | 6 |
Equivalent decimal number : 6
Time Complexity : O ( n ), where n is the length of the binary string.
Program for binary to decimal conversion.
def Binary_To_Decimal ( binary_string ) :
result = 0
for i in binary_string :
result = ( result << 1 ) + ( i == '1')
return result
def main () :
binary_string = input ( "Enter binary string : " )
print ( "Equivalent decimal number : " + str ( Binary_To_Decimal ( binary_string ) ) )
if __name__ == "__main__":
main()
Output
Enter binary string : 111
Equivalent decimal number : 7
Enter binary string : 1011
Equivalent decimal number : 11
Enter binary string : 1010101
Equivalent decimal number : 85
Enter binary string : 11111111
Equivalent decimal number : 255
#include<iostream>
#include<string>
using namespace std;
int Binary_To_Decimal(string binary_string) {
int result = 0;
for (int i=0; i < binary_string.size(); i++) {
result = (result << 1) + (binary_string.at(i) == '1');
}
return result;
}
int main()
{
string binary_string;
cout << "Enter binary string : ";
cin >> binary_string;
cout << "Equivalent decimal number : " << Binary_To_Decimal(binary_string) << endl;
return 0;
}
Output
Enter binary string : 100000000
Converted decimal number : 256
Enter binary string : 0101
Converted decimal number : 5
Enter binary string : 10
Converted decimal number : 2
import java.util.Scanner;
class Binary_To_Decimal {
public static int BinaryToDecimal ( String binary_string ) {
int result = 0;
for ( int i = 0; i < binary_string.length(); i++ ) {
int x = ( binary_string.charAt(i) == '1' ) ? 1 : 0;
result = ( result << 1 ) + x;
}
return result;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter binary string : ");
String binary_string = sc.nextLine();
System.out.println( "Equivalent decimal number : " + BinaryToDecimal ( binary_string ) );
}
}
Output
Enter binary string : 111
Equivalent decimal number : 7
Enter binary string : 1011
Equivalent decimal number : 11
Enter binary string : 1010101
Equivalent decimal number : 85
Enter binary string : 11111111
Equivalent decimal number : 255