参考http://www.cnblogs.com/BitArt/archive/2013/04/10/3010073.html
http://blog.sina.com.cn/s/blog_6d30f67301017tv7.html
二进制到格雷码的转换:
自然二进制数转换到格雷码
------------
设有 N 位二进制数 B(i),其中 0 <= i <= N - 1;它可以变换成为同样位数的格雷码 G(i)。
二进制数与格雷码的转换公式如下:
G(i) = B(i+1) XOR B(i) ; 0 <= i < N - 1
G(i) = B(i) ; i = N - 1
- 使用gray码进行对比,如何判断“空”与“满”
空满判断
使用gray码解决了一个问题,但同时也带来另一个问题,即在格雷码域如何判断空与满。
- 对于“空”的判断依然依据二者完全相等(包括MSB);
而对于“满”的判断,如下图,由于gray码除了MSB外,具有镜像对称的特点,当读指针指向7,写指针指向8时,除了MSB,其余位皆相同,不能说它为满。因此不能单纯的只检测最高位了,在gray码上判断为满必须同时满足以下3条:
- wptr和同步过来的rptr的MSB不相等,因为wptr必须比rptr多折回一次。
- wptr与rptr的次高位不相等,如上图位置7和位置15,转化为二进制对应的是0111和1111,MSB不同说明多折回一次,111相同代表同一位置。
- 剩下的其余位完全相等。
代码参考:http://www.cnblogs.com/qiweiwang/archive/2011/09/16/2178939.html