diff --git a/src/main/java/com/thealgorithms/bitmanipulation/FindNthBit.java b/src/main/java/com/thealgorithms/bitmanipulation/FindNthBit.java new file mode 100644 index 000000000000..7a35fc3feebf --- /dev/null +++ b/src/main/java/com/thealgorithms/bitmanipulation/FindNthBit.java @@ -0,0 +1,46 @@ +package com.thealgorithms.bitmanipulation; + +/** + * A utility class to find the Nth bit of a given number. + * + *
This class provides a method to extract the value of the Nth bit (either 0 or 1) + * from the binary representation of a given integer. + * + *
Example: + *
{@code + * int result = FindNthBit.findNthBit(5, 2); // returns 0 as the 2nd bit of 5 (binary 101) is 0. + * }+ * + *
Author: Tuhinm2002 + */ +public final class FindNthBit { + + /** + * Private constructor to prevent instantiation. + * + *
This is a utility class, and it should not be instantiated. + * Attempting to instantiate this class will throw an UnsupportedOperationException. + */ + private FindNthBit() { + throw new UnsupportedOperationException("Utility class"); + } + + /** + * Finds the value of the Nth bit of the given number. + * + *
This method uses bitwise operations to extract the Nth bit from the
+ * binary representation of the given integer.
+ *
+ * @param num the integer number whose Nth bit is to be found
+ * @param n the bit position (1-based) to retrieve
+ * @return the value of the Nth bit (0 or 1)
+ * @throws IllegalArgumentException if the bit position is less than 1
+ */
+ public static int findNthBit(int num, int n) {
+ if (n < 1) {
+ throw new IllegalArgumentException("Bit position must be greater than or equal to 1.");
+ }
+ // Shifting the number to the right by (n - 1) positions and checking the last bit
+ return (num & (1 << (n - 1))) >> (n - 1);
+ }
+}
diff --git a/src/test/java/com/thealgorithms/bitmanipulation/FindNthBitTest.java b/src/test/java/com/thealgorithms/bitmanipulation/FindNthBitTest.java
new file mode 100644
index 000000000000..978003d21358
--- /dev/null
+++ b/src/test/java/com/thealgorithms/bitmanipulation/FindNthBitTest.java
@@ -0,0 +1,39 @@
+package com.thealgorithms.bitmanipulation;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.stream.Stream;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+public final class FindNthBitTest {
+
+ /**
+ * A parameterized test that checks the value of the Nth bit for different inputs.
+ *
+ * @param num the number whose Nth bit is being tested
+ * @param n the bit position
+ * @param expected the expected value of the Nth bit (0 or 1)
+ */
+ @ParameterizedTest
+ @MethodSource("provideTestCases")
+ void findNthBitParameterizedTest(int num, int n, int expected) {
+ assertEquals(expected, FindNthBit.findNthBit(num, n));
+ }
+
+ /**
+ * Provides the test cases as a stream of arguments for the parameterized test.
+ *
+ * @return a stream of test cases where each case consists of a number, the bit position,
+ * and the expected result.
+ */
+ private static Stream