Added binary string to decimal converter (#6915)

added binary string to decimal converter
This commit is contained in:
Taranjeet Singh Kalsi
2025-10-27 02:09:39 +05:30
committed by GitHub
parent ae2e40acab
commit 21eff8ad09
2 changed files with 40 additions and 0 deletions

View File

@@ -30,4 +30,30 @@ final class BinaryToDecimal {
}
return decimalValue;
}
/**
* Converts a binary String to its decimal equivalent using bitwise operators.
*
* @param binary The binary number to convert.
* @return The decimal equivalent of the binary number.
* @throws IllegalArgumentException If the binary number contains digits other than 0 and 1.
*/
public static long binaryStringToDecimal(String binary) {
boolean isNegative = binary.charAt(0) == '-';
if (isNegative) {
binary = binary.substring(1);
}
long decimalValue = 0;
for (char bit : binary.toCharArray()) {
if (bit != '0' && bit != '1') {
throw new IllegalArgumentException("Incorrect binary digit: " + bit);
}
// shift left by 1 (multiply by 2) and add bit value
decimalValue = (decimalValue << 1) | (bit - '0');
}
return isNegative ? -decimalValue : decimalValue;
}
}

View File

@@ -18,6 +18,12 @@ public class BinaryToDecimalTest {
assertEquals(5, BinaryToDecimal.binaryToDecimal(101));
assertEquals(63, BinaryToDecimal.binaryToDecimal(111111));
assertEquals(512, BinaryToDecimal.binaryToDecimal(1000000000));
assertEquals(0, BinaryToDecimal.binaryStringToDecimal("0"));
assertEquals(1, BinaryToDecimal.binaryStringToDecimal("1"));
assertEquals(5, BinaryToDecimal.binaryStringToDecimal("101"));
assertEquals(63, BinaryToDecimal.binaryStringToDecimal("111111"));
assertEquals(512, BinaryToDecimal.binaryStringToDecimal("1000000000"));
}
@Test
@@ -25,6 +31,9 @@ public class BinaryToDecimalTest {
public void testNegativeBinaryToDecimal() {
assertEquals(-1, BinaryToDecimal.binaryToDecimal(-1));
assertEquals(-42, BinaryToDecimal.binaryToDecimal(-101010));
assertEquals(-1, BinaryToDecimal.binaryStringToDecimal("-1"));
assertEquals(-42, BinaryToDecimal.binaryStringToDecimal("-101010"));
}
@Test
@@ -32,11 +41,16 @@ public class BinaryToDecimalTest {
public void testLargeBinaryToDecimal() {
assertEquals(262144L, BinaryToDecimal.binaryToDecimal(1000000000000000000L));
assertEquals(524287L, BinaryToDecimal.binaryToDecimal(1111111111111111111L));
assertEquals(262144L, BinaryToDecimal.binaryStringToDecimal("1000000000000000000"));
assertEquals(524287L, BinaryToDecimal.binaryStringToDecimal("1111111111111111111"));
}
@ParameterizedTest
@CsvSource({"2", "1234", "11112", "101021"})
void testNotCorrectBinaryInput(long binaryNumber) {
assertThrows(IllegalArgumentException.class, () -> BinaryToDecimal.binaryToDecimal(binaryNumber));
assertThrows(IllegalArgumentException.class, () -> BinaryToDecimal.binaryStringToDecimal(Long.toString(binaryNumber)));
}
}