【发布时间】:2010-02-05 22:32:11
【问题描述】:
在 google 协议缓冲区encoding overview 中,他们引入了一种称为“Zig Zag Encoding”的东西,它采用小幅度的有符号数字,并创建一系列小幅度的无符号数字。
例如
Encoded => Plain
0 => 0
1 => -1
2 => 1
3 => -2
4 => 2
5 => -3
6 => 3
等等。他们为此提供的编码功能相当巧妙,它是:
(n << 1) ^ (n >> 31) //for a 32 bit integer
我了解它的工作原理,但是,我终其一生都无法弄清楚如何将其反转并将其解码回有符号的 32 位整数
【问题讨论】:
标签: language-agnostic bit-manipulation protocol-buffers bitfoo zigzag-encoding