-
Notifications
You must be signed in to change notification settings - Fork 19.6k
/
Copy pathGrayCodeConversion.java
44 lines (41 loc) · 1.04 KB
/
GrayCodeConversion.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package com.thealgorithms.bitmanipulation;
/**
* Gray code is a binary numeral system where two successive values differ in only one bit.
* This is a simple conversion between binary and Gray code.
* Example:
* 7 -> 0111 -> 0100 -> 4
* 4 -> 0100 -> 0111 -> 7
* 0 -> 0000 -> 0000 -> 0
* 1 -> 0001 -> 0000 -> 0
* 2 -> 0010 -> 0011 -> 3
* 3 -> 0011 -> 0010 -> 2
*
* @author Hardvan
*/
public final class GrayCodeConversion {
private GrayCodeConversion() {
}
/**
* Converts a binary number to Gray code.
*
* @param num The binary number.
* @return The corresponding Gray code.
*/
public static int binaryToGray(int num) {
return num ^ (num >> 1);
}
/**
* Converts a Gray code number back to binary.
*
* @param gray The Gray code number.
* @return The corresponding binary number.
*/
public static int grayToBinary(int gray) {
int binary = gray;
while (gray > 0) {
gray >>= 1;
binary ^= gray;
}
return binary;
}
}