#include #include long long gray2bin(long long bin) { bin ^= bin >> 1; bin ^= bin >> 2; bin ^= bin >> 4; bin ^= bin >> 8; bin ^= bin >> 16; bin ^= bin >> 32; return bin; } long long bin2gray(long long gray) { return gray ^ gray >> 1; } int main(int argc, char **argv) { long long n = atoll(argv[1]); printf("%llx → %llx → %llx\n", n, gray2bin(n), bin2gray(gray2bin(n))); return 0; }