23 lines
467 B
Swift
23 lines
467 B
Swift
func grayEncode(_ i: Int) -> Int {
|
|
return (i >> 1) ^ i
|
|
}
|
|
|
|
func grayDecode(_ i: Int) -> Int {
|
|
switch i {
|
|
case 0:
|
|
return 0
|
|
case _:
|
|
return i ^ grayDecode(i >> 1)
|
|
}
|
|
}
|
|
|
|
for i in 0..<32 {
|
|
let iStr = String(i, radix: 2)
|
|
let encode = grayEncode(i)
|
|
let encodeStr = String(encode, radix: 2)
|
|
let decode = grayDecode(encode)
|
|
let decodeStr = String(decode, radix: 2)
|
|
|
|
print("\(i) (\(iStr)) => \(encode) (\(encodeStr)) => \(decode) (\(decodeStr))")
|
|
}
|