File tree 3 files changed +75
-0
lines changed
main/java/com/thealgorithms/bitmanipulation
test/java/com/thealgorithms/bitmanipulation
3 files changed +75
-0
lines changed Original file line number Diff line number Diff line change 27
27
* [ ClearLeftmostSetBit] ( https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/ClearLeftmostSetBit.java )
28
28
* [ CountLeadingZeros] ( https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/CountLeadingZeros.java )
29
29
* [ 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 )
30
31
* [ HighestSetBit] ( https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/HighestSetBit.java )
31
32
* [ IndexOfRightMostSetBit] ( https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/IndexOfRightMostSetBit.java )
32
33
* [ IsEven] ( https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/IsEven.java )
652
653
* [ ClearLeftmostSetBitTest] ( https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/ClearLeftmostSetBitTest.java )
653
654
* [ CountLeadingZerosTest] ( https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/CountLeadingZerosTest.java )
654
655
* [ 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 )
655
657
* [ HighestSetBitTest] ( https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/HighestSetBitTest.java )
656
658
* [ IndexOfRightMostSetBitTest] ( https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/IndexOfRightMostSetBitTest.java )
657
659
* [ 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