浅谈格雷码(Grey Code)在信息学竞赛中的应用
生活随笔
收集整理的這篇文章主要介紹了
浅谈格雷码(Grey Code)在信息学竞赛中的应用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.格雷碼的概念
1.性質
格雷碼(Grey Code),又叫循環二進制碼或反射二進制碼,是一種編碼方式,它的基本特點是任意兩個相鄰的格雷碼只有一位二進制數不同。
常用的二進制數與格雷碼間的轉換關系如下表:
從表中我們可以發現任意兩個相鄰的格雷碼只有一位二進制數不同
2.轉換方法
二進制數轉格雷碼的方法如下:
從左到右,每一位的格雷碼值等于該位的二進制值異或(XOR)上該位左邊一位的二進制值。特別地,最左邊一位的格雷碼值等于二進制值。
鑒于有些讀者可能對異或不熟悉,這里給出異或的對照表
如:0100
從左到右分別編為1,2,3,4位
第1位0,保持不變
第2位1,左側為0, 1 XOR 0=1
第3位0 ,左側為1, 0 XOR 1=1
第4位0,左側為0, 0 XOR 0=0
所以0100 的格雷碼為0110
代碼實現上,為了是每一位能與它左邊一位異或,我們可以直接將x異或上x>>1
如:0100,左移一位是0010
0100
0010
————
0110
求單個格雷碼的代碼如下
求0~2^n-1全部格雷碼的代碼如下
void get_grey(int n,int *x){//x[i]表示i對應的格雷碼 for(int i=0;i<(1<<n);i++){x[i]=i^(i>>1);} }轉載于:https://www.cnblogs.com/birchtree/p/9845847.html
總結
以上是生活随笔為你收集整理的浅谈格雷码(Grey Code)在信息学竞赛中的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android手机中怎么样在没root的
- 下一篇: 10.跳转