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;
}
}