MyMSDN

MyMSDN记录开发新知道

zig-zag编码方式

zig-zag:就是把(-1)1000 0001变成0000 0011,注意最后一个1是符号位,也就是2,那么如果是个int32的话,1000 0000 0000 0000 0000 0000 0000 0001 就变成了000 0000 0000 0000 0000 0000 0000 00011,那么也就是11了,那么可以节约很多符号位。http://goo.gl/2wRKb
用位运算来表示把一个负数转换成zig-zag编码,就是

int32是:(
n << 1) ^ (n >> 31)
int64是:(n << 1) ^ (n >> 63)
也就是说,如果是负数,对于32位最多能省去30格(其中1格是符号位,另一个代表最小值1,此处假设“正负0”不合法)。同理,64位最多能省去62位。当然比较极端的是所有的位数都被用上了。

posted on 2011-03-19 00:36 volnet 阅读(2883) 评论(0)  编辑 收藏 引用 所属分类: C/C++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


特殊功能