Given a number, implement the conversion from binary to reflected binary.

Reflected binary is an alternate binary representation where numbers in sequence only change a single bit at a time. For example, the numbers 0 through 4 are represented in binary and reflected binary below. This is also known as Gray code.

Number

0

1

2

3

4

Binary

0000

0001

0010

0011

0100

Reflected

0000

0001

0011

0010

0110

uint toReflected(uint x) { return x ^ (x >> 1) }