From ce43c613ddd7c5ef6c1fa4d27b6585d59bdbbe73 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Wed, 16 Oct 2024 09:16:37 +0530 Subject: [PATCH 1/3] feat: Add `FirstDifferentBit` new algorithm with Junit tests --- .../bitmanipulation/FirstDifferentBit.java | 33 +++++++++++++++++++ .../FirstDifferentBitTest.java | 15 +++++++++ 2 files changed, 48 insertions(+) create mode 100644 src/main/java/com/thealgorithms/bitmanipulation/FirstDifferentBit.java create mode 100644 src/test/java/com/thealgorithms/bitmanipulation/FirstDifferentBitTest.java diff --git a/src/main/java/com/thealgorithms/bitmanipulation/FirstDifferentBit.java b/src/main/java/com/thealgorithms/bitmanipulation/FirstDifferentBit.java new file mode 100644 index 000000000000..456f3fa7b950 --- /dev/null +++ b/src/main/java/com/thealgorithms/bitmanipulation/FirstDifferentBit.java @@ -0,0 +1,33 @@ +package com.thealgorithms.bitmanipulation; + +/** + * This class provides a method to find the first differing bit + * between two integers. + * + * Example: + * x = 10 (1010 in binary) + * y = 12 (1100 in binary) + * The first differing bit is at index 1 (0-based) + * So, the output will be 1 + * + * @author Hardvan + */ +public final class FirstDifferentBit { + private FirstDifferentBit() { + } + + /** + * Identifies the index of the first differing bit between two integers. + * Steps: + * 1. XOR the two integers to get the differing bits + * 2. Find the index of the first set bit in the XOR result + * + * @param x the first integer + * @param y the second integer + * @return the index of the first differing bit (0-based) + */ + public static int firstDifferentBit(int x, int y) { + int diff = x ^ y; + return Integer.numberOfTrailingZeros(diff); + } +} diff --git a/src/test/java/com/thealgorithms/bitmanipulation/FirstDifferentBitTest.java b/src/test/java/com/thealgorithms/bitmanipulation/FirstDifferentBitTest.java new file mode 100644 index 000000000000..ae7bad9a666a --- /dev/null +++ b/src/test/java/com/thealgorithms/bitmanipulation/FirstDifferentBitTest.java @@ -0,0 +1,15 @@ +package com.thealgorithms.bitmanipulation; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +public class FirstDifferentBitTest { + + @ParameterizedTest + @CsvSource({"10, 8, 1", "7, 5, 1", "15, 14, 0", "1, 2, 0"}) + void testFirstDifferentBit(int x, int y, int expected) { + assertEquals(expected, FirstDifferentBit.firstDifferentBit(x, y)); + } +} From eeea9929684800477b3422db3550070571dcd025 Mon Sep 17 00:00:00 2001 From: Hardvan Date: Wed, 16 Oct 2024 03:46:55 +0000 Subject: [PATCH 2/3] Update directory --- DIRECTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 6429757179e9..d70061f13386 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -31,6 +31,7 @@ * [CountLeadingZeros](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/CountLeadingZeros.java) * [CountSetBits](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/CountSetBits.java) * [FindNthBit](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/FindNthBit.java) + * [FirstDifferentBit](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/FirstDifferentBit.java) * [GrayCodeConversion](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/GrayCodeConversion.java) * [HammingDistance](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/HammingDistance.java) * [HigherLowerPowerOfTwo](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/HigherLowerPowerOfTwo.java) @@ -694,6 +695,7 @@ * [CountLeadingZerosTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/CountLeadingZerosTest.java) * [CountSetBitsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/CountSetBitsTest.java) * [FindNthBitTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/FindNthBitTest.java) + * [FirstDifferentBitTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/FirstDifferentBitTest.java) * [GrayCodeConversionTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/GrayCodeConversionTest.java) * [HammingDistanceTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/HammingDistanceTest.java) * [HigherLowerPowerOfTwoTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/HigherLowerPowerOfTwoTest.java) From b72dc2dfbdc26df116f7ad43c72534d873d9c9e9 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Wed, 16 Oct 2024 09:18:46 +0530 Subject: [PATCH 3/3] Fix --- .../com/thealgorithms/bitmanipulation/FirstDifferentBit.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/bitmanipulation/FirstDifferentBit.java b/src/main/java/com/thealgorithms/bitmanipulation/FirstDifferentBit.java index 456f3fa7b950..9a761c572e2c 100644 --- a/src/main/java/com/thealgorithms/bitmanipulation/FirstDifferentBit.java +++ b/src/main/java/com/thealgorithms/bitmanipulation/FirstDifferentBit.java @@ -20,7 +20,7 @@ private FirstDifferentBit() { * Identifies the index of the first differing bit between two integers. * Steps: * 1. XOR the two integers to get the differing bits - * 2. Find the index of the first set bit in the XOR result + * 2. Find the index of the first set bit in XOR result * * @param x the first integer * @param y the second integer