// 格雷碼——相鄰數值之間僅有一個位元不同的二進位系統
任兩個相鄰碼字之間僅有一個位元改變。
在類比/數位轉換等場景中,有效減少毛刺與誤判。
首碼與尾碼同樣只差一個位元,適合環狀計數。
格雷碼(Gray Code,又稱反射二進位碼)是一種編碼方式,使得每次狀態變化時只有一個位元翻轉。常見作法是將二進位數的每一位與前一位做 XOR,產生對應的格雷碼。由於同一時間只會有一位變化,可大幅降低位置編碼器與數位電路在切換瞬間的讀值錯誤。
Decimal | Binary | Gray Code 0 | 0000 | 0000 1 | 0001 | 0001 2 | 0010 | 0011 3 | 0011 | 0010 4 | 0100 | 0110 5 | 0101 | 0111 6 | 0110 | 0101 7 | 0111 | 0100 說明:任兩個相鄰的格雷碼之間僅有 1 位不同
格雷碼是一種相鄰狀態只改變一個位元的二進位編碼方式,又稱反射二進位碼。與一般二進位遞增相比,它能避免多位同時翻轉,減少切換瞬間所產生的錯誤讀值。
轉換規則:1)最高有效位元(MSB)保持不變;2)從次高位開始,每一位等於目前二進位位元與前一位的 XOR。公式:G[i] = B[i] XOR B[i-1]。例如,二進位 1011 對應的格雷碼為 1110。
在傳統二進位當中,像 0111 跳到 1000 會有多位元同時翻轉,若感測器不同步,很容易讀到不存在的中間值。格雷碼一次只翻轉一位,在旋轉編碼器、滑動電位器等應用中可以顯著降低歧義。
格雷碼廣泛用於旋轉編碼器、卡諾圖邏輯化簡、數位通訊調變與錯誤修正、遺傳演算法中的染色體編碼,以及各種希望避免「多位跳變」的計數器與取樣系統。