File tree Expand file tree Collapse file tree 3 files changed +75
-0
lines changed
main/java/com/thealgorithms/bitmanipulation
test/java/com/thealgorithms/bitmanipulation Expand file tree Collapse file tree 3 files changed +75
-0
lines changed Original file line number Diff line number Diff line change 2727 * [ ClearLeftmostSetBit] ( https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/ClearLeftmostSetBit.java )
2828 * [ CountLeadingZeros] ( https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/CountLeadingZeros.java )
2929 * [ CountSetBits] ( https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/CountSetBits.java )
30+ * [ GrayCodeConversion] ( https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/GrayCodeConversion.java )
3031 * [ HighestSetBit] ( https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/HighestSetBit.java )
3132 * [ IndexOfRightMostSetBit] ( https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/IndexOfRightMostSetBit.java )
3233 * [ IsEven] ( https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/IsEven.java )
652653 * [ ClearLeftmostSetBitTest] ( https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/ClearLeftmostSetBitTest.java )
653654 * [ CountLeadingZerosTest] ( https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/CountLeadingZerosTest.java )
654655 * [ CountSetBitsTest] ( https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/CountSetBitsTest.java )
656+ * [ GrayCodeConversionTest] ( https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/GrayCodeConversionTest.java )
655657 * [ HighestSetBitTest] ( https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/HighestSetBitTest.java )
656658 * [ IndexOfRightMostSetBitTest] ( https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/IndexOfRightMostSetBitTest.java )
657659 * [ IsEvenTest] ( https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/IsEvenTest.java )
Original file line number Diff line number Diff line change 1+ package com .thealgorithms .bitmanipulation ;
2+
3+ /**
4+ * Gray code is a binary numeral system where two successive values differ in only one bit.
5+ * This is a simple conversion between binary and Gray code.
6+ * Example:
7+ * 7 -> 0111 -> 0100 -> 4
8+ * 4 -> 0100 -> 0111 -> 7
9+ * 0 -> 0000 -> 0000 -> 0
10+ * 1 -> 0001 -> 0000 -> 0
11+ * 2 -> 0010 -> 0011 -> 3
12+ * 3 -> 0011 -> 0010 -> 2
13+ *
14+ * @author Hardvan
15+ */
16+ public final class GrayCodeConversion {
17+ private GrayCodeConversion () {
18+ }
19+
20+ /**
21+ * Converts a binary number to Gray code.
22+ *
23+ * @param num The binary number.
24+ * @return The corresponding Gray code.
25+ */
26+ public static int binaryToGray (int num ) {
27+ return num ^ (num >> 1 );
28+ }
29+
30+ /**
31+ * Converts a Gray code number back to binary.
32+ *
33+ * @param gray The Gray code number.
34+ * @return The corresponding binary number.
35+ */
36+ public static int grayToBinary (int gray ) {
37+ int binary = gray ;
38+ while (gray > 0 ) {
39+ gray >>= 1 ;
40+ binary ^= gray ;
41+ }
42+ return binary ;
43+ }
44+ }
Original file line number Diff line number Diff line change 1+ package com .thealgorithms .bitmanipulation ;
2+
3+ import static org .junit .jupiter .api .Assertions .assertEquals ;
4+
5+ import org .junit .jupiter .api .Test ;
6+
7+ public class GrayCodeConversionTest {
8+
9+ @ Test
10+ public void testBinaryToGray () {
11+ assertEquals (7 , GrayCodeConversion .binaryToGray (5 )); // 101 -> 111
12+ assertEquals (4 , GrayCodeConversion .binaryToGray (7 )); // 111 -> 100
13+ assertEquals (1 , GrayCodeConversion .binaryToGray (1 )); // 001 -> 001
14+ }
15+
16+ @ Test
17+ public void testGrayToBinary () {
18+ assertEquals (5 , GrayCodeConversion .grayToBinary (7 )); // 111 -> 101
19+ assertEquals (4 , GrayCodeConversion .grayToBinary (6 )); // 110 -> 100
20+ assertEquals (1 , GrayCodeConversion .grayToBinary (1 )); // 001 -> 001
21+ }
22+
23+ @ Test
24+ public void testBinaryGrayCycle () {
25+ int binary = 9 ; // 1001 in binary
26+ int gray = GrayCodeConversion .binaryToGray (binary );
27+ assertEquals (binary , GrayCodeConversion .grayToBinary (gray )); // Should return to original binary
28+ }
29+ }
You can’t perform that action at this time.
0 commit comments