Skip to content

Commit 88d0827

Browse files
Merge branch 'master' into master
2 parents e562d1e + 14a0de4 commit 88d0827

File tree

4 files changed

+42
-2
lines changed

4 files changed

+42
-2
lines changed

.github/workflows/close-failed-prs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
runs-on: ubuntu-latest
1616
steps:
1717
- name: Close stale PRs
18-
uses: actions/github-script@v7
18+
uses: actions/github-script@v8
1919
with:
2020
github-token: ${{ secrets.GITHUB_TOKEN }}
2121
script: |

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@
112112
<dependency>
113113
<groupId>com.puppycrawl.tools</groupId>
114114
<artifactId>checkstyle</artifactId>
115-
<version>12.1.0</version>
115+
<version>12.1.1</version>
116116
</dependency>
117117
</dependencies>
118118
</plugin>

src/main/java/com/thealgorithms/conversions/BinaryToDecimal.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,30 @@ public static long binaryToDecimal(long binaryNumber) {
3030
}
3131
return decimalValue;
3232
}
33+
34+
/**
35+
* Converts a binary String to its decimal equivalent using bitwise operators.
36+
*
37+
* @param binary The binary number to convert.
38+
* @return The decimal equivalent of the binary number.
39+
* @throws IllegalArgumentException If the binary number contains digits other than 0 and 1.
40+
*/
41+
public static long binaryStringToDecimal(String binary) {
42+
boolean isNegative = binary.charAt(0) == '-';
43+
if (isNegative) {
44+
binary = binary.substring(1);
45+
}
46+
47+
long decimalValue = 0;
48+
49+
for (char bit : binary.toCharArray()) {
50+
if (bit != '0' && bit != '1') {
51+
throw new IllegalArgumentException("Incorrect binary digit: " + bit);
52+
}
53+
// shift left by 1 (multiply by 2) and add bit value
54+
decimalValue = (decimalValue << 1) | (bit - '0');
55+
}
56+
57+
return isNegative ? -decimalValue : decimalValue;
58+
}
3359
}

src/test/java/com/thealgorithms/conversions/BinaryToDecimalTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,39 @@ public void testBinaryToDecimal() {
1818
assertEquals(5, BinaryToDecimal.binaryToDecimal(101));
1919
assertEquals(63, BinaryToDecimal.binaryToDecimal(111111));
2020
assertEquals(512, BinaryToDecimal.binaryToDecimal(1000000000));
21+
22+
assertEquals(0, BinaryToDecimal.binaryStringToDecimal("0"));
23+
assertEquals(1, BinaryToDecimal.binaryStringToDecimal("1"));
24+
assertEquals(5, BinaryToDecimal.binaryStringToDecimal("101"));
25+
assertEquals(63, BinaryToDecimal.binaryStringToDecimal("111111"));
26+
assertEquals(512, BinaryToDecimal.binaryStringToDecimal("1000000000"));
2127
}
2228

2329
@Test
2430
// Test converting negative binary numbers
2531
public void testNegativeBinaryToDecimal() {
2632
assertEquals(-1, BinaryToDecimal.binaryToDecimal(-1));
2733
assertEquals(-42, BinaryToDecimal.binaryToDecimal(-101010));
34+
35+
assertEquals(-1, BinaryToDecimal.binaryStringToDecimal("-1"));
36+
assertEquals(-42, BinaryToDecimal.binaryStringToDecimal("-101010"));
2837
}
2938

3039
@Test
3140
// Test converting binary numbers with large values
3241
public void testLargeBinaryToDecimal() {
3342
assertEquals(262144L, BinaryToDecimal.binaryToDecimal(1000000000000000000L));
3443
assertEquals(524287L, BinaryToDecimal.binaryToDecimal(1111111111111111111L));
44+
45+
assertEquals(262144L, BinaryToDecimal.binaryStringToDecimal("1000000000000000000"));
46+
assertEquals(524287L, BinaryToDecimal.binaryStringToDecimal("1111111111111111111"));
3547
}
3648

3749
@ParameterizedTest
3850
@CsvSource({"2", "1234", "11112", "101021"})
3951
void testNotCorrectBinaryInput(long binaryNumber) {
4052
assertThrows(IllegalArgumentException.class, () -> BinaryToDecimal.binaryToDecimal(binaryNumber));
53+
54+
assertThrows(IllegalArgumentException.class, () -> BinaryToDecimal.binaryStringToDecimal(Long.toString(binaryNumber)));
4155
}
4256
}

0 commit comments

Comments
 (0)