格雷碼
在一組數(shù)的編碼中,若任意兩個(gè)相鄰的代碼只有一位二進(jìn)制數(shù)不同,則稱這種編碼為格雷碼(Gray Code),另外由于最大數(shù)與最小數(shù)之間也僅一位數(shù)不同,即“首尾相連”,因此又稱循環(huán)碼或反射碼。在數(shù)字系統(tǒng)中,常要求代碼按一定順序變化。例如,按自然數(shù)遞增計(jì)數(shù),若采用8421碼,則數(shù)0111變到1000時(shí)四位均要變化,而在實(shí)際電路中,4位的變化不可能絕對(duì)同時(shí)發(fā)生,則計(jì)數(shù)中可能出現(xiàn)短暫的其它代碼(1100、1111等)。在特定情況下可能導(dǎo)致電路狀態(tài)錯(cuò)誤或輸入錯(cuò)誤。使用格雷碼可以避免這種錯(cuò)誤。格雷碼有多種編碼形式。
格雷碼(Gray Code)曾用過Grey Code、葛萊碼、格萊碼、戈萊碼、循環(huán)碼、反射二進(jìn)制碼、最小差錯(cuò)碼等名字,它們有的不對(duì),有的易與其它名稱混淆,建議不要再使用這些曾用名。
二進(jìn)制
二進(jìn)制是計(jì)算技術(shù)中廣泛采用的一種數(shù)制。二進(jìn)制數(shù)據(jù)是用0和1兩個(gè)數(shù)碼來表示的數(shù)。它的基數(shù)為2,進(jìn)位規(guī)則是“逢二進(jìn)一”,借位規(guī)則是“借一當(dāng)二”,由18世紀(jì)德國數(shù)理哲學(xué)大師萊布尼茲發(fā)現(xiàn)。當(dāng)前的計(jì)算機(jī)系統(tǒng)使用的基本上是二進(jìn)制系統(tǒng),數(shù)據(jù)在計(jì)算機(jī)中主要是以補(bǔ)碼的形式存儲(chǔ)的。計(jì)算機(jī)中的二進(jìn)制則是一個(gè)非常微小的開關(guān),用“開”來表示1,“關(guān)”來表示0。
20世紀(jì)被稱作第三次科技革命的重要標(biāo)志之一的計(jì)算機(jī)的發(fā)明與應(yīng)用,因?yàn)閿?shù)字計(jì)算機(jī)只能識(shí)別和處理由‘0’。‘1’符號(hào)串組成的代碼。其運(yùn)算模式正是二進(jìn)制。19世紀(jì)愛爾蘭邏輯學(xué)家喬治布爾對(duì)邏輯命題的思考過程轉(zhuǎn)化為對(duì)符號(hào)“0‘’。‘’1‘’的某種代數(shù)演算,二進(jìn)制是逢2進(jìn)位的進(jìn)位制。0、1是基本算符。因?yàn)樗皇褂?、1兩個(gè)數(shù)字符號(hào),非常簡(jiǎn)單方便,易于用電子方式實(shí)現(xiàn)。

二進(jìn)制轉(zhuǎn)格雷碼公式
十進(jìn)制 586 = 二進(jìn)制 1001001010 = 格雷碼 1101101111。
二進(jìn)制碼 ----》 格雷碼(編碼):
從最右邊一位起,依次將每一位與左邊一位異或(XOR),作為對(duì)應(yīng)格雷碼該位的值,最左邊一位不變(相當(dāng)于左邊是0)。
格雷碼的是特點(diǎn)是:
相鄰兩數(shù)的格雷碼,僅僅有一位二進(jìn)制發(fā)生變化。
而且在其范圍內(nèi)的最小值和最大值,也僅僅有一位二進(jìn)制發(fā)生變化。
例如下面兩數(shù):
最小:二進(jìn)制0000=格雷碼0000
最大:二進(jìn)制1111=格雷碼1000
看到了吧,0000 和 1000,僅僅有一位數(shù)發(fā)生變化。
-------
如果在變換的過程中,先把十進(jìn)制轉(zhuǎn)換成BCD碼,這就失去了格雷碼的特點(diǎn)。
因?yàn)樵贐CD碼中:
最小:二進(jìn)制0000=格雷碼0000
最大:二進(jìn)制1001=格雷碼1101
可以看出,它們之間有三位發(fā)生變化。
通過BCD碼來變換格雷碼,思路不對(duì)。變換出來的,并不是原數(shù)的格雷碼。
自然二進(jìn)制數(shù)轉(zhuǎn)換到格雷碼
------------
設(shè)有 N 位二進(jìn)制數(shù) B(i),其中 0 《= i 《= N - 1;它可以變換成為同樣位數(shù)的格雷碼 G(i)。
二進(jìn)制數(shù)與格雷碼的轉(zhuǎn)換公式如下:
G(i) = B(i+1) XOR B(i) ; 0 《= i 《 N - 1
G(i) = B(i) ; i = N - 1
如果是通過編程計(jì)算進(jìn)行變換,就需要使用這個(gè)公式逐位的計(jì)算;
如果是使用硬件電路進(jìn)行變換,就可以使用做而論道前面在回答問題時(shí)給出的電路。
格雷碼轉(zhuǎn)換到自然二進(jìn)制數(shù)
------------
設(shè)有 N 位格雷碼 G(i),把它轉(zhuǎn)換成自然二進(jìn)制數(shù)的算法如下。
自然二進(jìn)制碼的最高位等于雷碼的最高位;
自然二進(jìn)制碼的次高位為最高位自然二進(jìn)制碼與次高位格雷碼相異或;
自然二進(jìn)制碼的其余各位與次高位自然二進(jìn)制碼的求法相類似。
轉(zhuǎn)換公式如下:
B(i) = G(i) ; i = N - 1
B(i) = B(i+1) XOR G(i) ; 0 《= i 《 N - 1
-
二進(jìn)制
+關(guān)注
關(guān)注
2文章
809瀏覽量
43029 -
格雷碼
+關(guān)注
關(guān)注
2文章
34瀏覽量
13537
發(fā)布評(píng)論請(qǐng)先 登錄
什么是格雷碼
二進(jìn)制格雷碼與自然二進(jìn)制碼的互換分析
二進(jìn)制碼詳解
二進(jìn)制格雷碼與自然二進(jìn)制碼的互換
格雷碼簡(jiǎn)介及格雷碼與二進(jìn)制的轉(zhuǎn)換程序
格雷碼簡(jiǎn)介及格雷碼與二進(jìn)制的轉(zhuǎn)換程序
二進(jìn)制編碼和二進(jìn)制數(shù)據(jù)
格雷碼轉(zhuǎn)二進(jìn)制方法
FPGA學(xué)習(xí)系列:33. 二進(jìn)制轉(zhuǎn)格雷碼轉(zhuǎn)二進(jìn)制的設(shè)計(jì)
將格雷碼轉(zhuǎn)換為二進(jìn)制編碼器的方法
二進(jìn)制轉(zhuǎn)格雷碼公式
評(píng)論