一、什么是格雷碼?
格雷碼,又叫循環二進制碼或反射二進制碼,格雷碼是我們在工程中常會遇到的一種編碼方式,它的基本的特點就是任意兩個相鄰的代碼只有一位二進制數不同,這點在下面會詳細講解到。格雷碼的基本特點就是任意兩個相鄰的代碼只有一位二進制數不同,這點很重要。常用的二進制數與格雷碼間的轉換關系如下表:
二、二進制格雷碼與自然二進制碼的互換
1、二進制碼轉換成二進制格雷碼
二進制碼轉換成二進制格雷碼,其法則是保留二進制碼的最高位作為格雷碼的最高位,而次高位格雷碼為二進制碼的高位與次高位相異或,而格雷碼其余各位與次高位的求法相類似。
轉換代碼:
//根據二進制轉換成格雷碼的法則,可以得到以下的代碼:
static unsigned int DecimaltoGray(unsigned int x)
{
return x^(x》》1);
}
//以上代碼實現了unsigned int型數據到格雷碼的轉換,最高可轉換32位自然二進制碼,超出32位將溢出。
static int DecimaltoGray( int x)
{
return x^(x》》1);
}
//以上代碼實現了 int型數據到格雷碼的轉換,最高可轉換31位自然二進制碼,超出31位將溢出。 12345678910111213
2、二進制格雷碼轉換成二進制碼
二進制格雷碼轉換成二進制碼,其法則是保留格雷碼的最高位作為自然二進制碼的最高位,而次高位自然二進制碼為高位自然二進制碼與次高位格雷碼相異或,而自然二進制碼的其余各位與次高位自然二進制碼的求法相類似。
轉換代碼:
根據二進制格雷碼轉換成自然二進制碼的法則,可以得到以下的三種代碼方式:
? static unsigned int GraytoDecimal(unsigned int x)
? {
? unsigned int y = x;
? while(x》》=1)
? y ^= x;
? return y;
? }
? static unsigned int GraytoDecimal(unsigned int x)
? {
? x^=x》》16;
? x^=x》》8;
? x^=x》》4;
? x^=X》》2;
? x^=x^1;
? return x;
? }
? static unsigned int GraytoDecimal(unsigned int x)
? {
? int i;
? for(i=0;(1《《i)《sizeof(x)*8;i++)
? {
? x^=x》》(1《《i);
? }
? return x;
? }
//以上代碼實現了unsigned int型數據到自然二進制碼的轉換,最高可轉換32位格雷碼,超出32位將溢出。將數據類型改為I
-
二進制
+關注
關注
2文章
793瀏覽量
41597 -
格雷碼
+關注
關注
2文章
34瀏覽量
13175
發布評論請先 登錄
相關推薦
評論