二進位制轉格雷碼
反射二進位制碼或格雷碼是對二進位制數系統的一種排序,使得兩個連續的值只在一位(二進位制位)上有所不同。格雷碼在硬體生成的二進位制數的正常序列中非常有用,因為這些序列在從一個數字轉換到下一個數字的過程中可能會導致錯誤或歧義。因此,格雷碼可以輕鬆解決這個問題,因為在任意兩個數字之間的轉換過程中只有一位改變其值。
二進位制轉格雷碼
格雷碼用於旋轉和光電編碼器、卡諾圖和錯誤檢測。兩個相鄰格雷碼的漢明距離始終為1,並且第一個格雷碼和最後一個格雷碼的漢明距離也始終為1,因此它也稱為迴圈碼。
使用卡諾圖 (K) −您可以使用其他方法構造格雷碼,但它們可能無法像上述方法那樣並行執行。例如,可以使用如下所示的 K 圖構造 3 位格雷碼

| 十進位制 | 二進位制 | 格雷碼 |
|---|---|---|
| 0 | 000 | 000 |
| 1 | 001 | 001 |
| 2 | 010 | 011 |
| 3 | 011 | 010 |
| 4 | 100 | 110 |
| 5 | 101 | 111 |
| 6 | 110 | 101 |
| 7 | 111 | 100 |
使用反射和字首法 −
n位格雷碼可以使用如下解釋的反射和字首法遞迴生成。
- 生成 n=1 的程式碼:0 和 1 程式碼。
- 按順序取之前的程式碼:0 和 1。
- 在以下列表中新增反轉的程式碼:0、1、1 和 0。
- 現在為原始的先前程式碼新增字首 0,為新生成的程式碼新增字首 1:00、01、11 和 10。
因此,格雷碼 0 和 1 分別對應於二進位制數 0 和 1。格雷碼:00、01、11 和 10 分別對應於二進位制數:00、01、10 和 11。類似地,您可以為 3 位二進位制數構造格雷碼

使用異或 (⊕) 運算 −
這是一種從二進位制數獲得格雷碼的非常簡單的方法。以下是針對 n 位二進位制數的步驟 −
- 格雷碼的最高有效位 (MSB) 始終等於給定二進位制碼的 MSB。
- 輸出格雷碼的其他位可以透過對索引處的二進位制碼位和前一個索引進行異或運算來獲得。
例如,對於 3 位二進位制數,設二進位制數字為 b2、b1、b0,其中 b2 是最高有效位 (MSB),b0 是二進位制的最低有效位 (LSB)。格雷碼數字為 g2、g1、g0,其中 g2 是最高有效位 (MSB),g0 是格雷碼的最低有效位 (LSB)。
| 二進位制 b2 b1 b0 | 格雷碼 g2 g1 g0 |
|---|---|
| 000 | 000 |
| 001 | 001 |
| 010 | 011 |
| 011 | 010 |
| 100 | 110 |
| 101 | 111 |
| 110 | 101 |
| 111 | 100 |
因此,使用 k 圖求解布林表示式,將得到 g2=b2,g1=b1⊕b2,以及 g0=b0⊕b1。

類似地,您可以將 n 位 (bnb(n-1)...b2b1b0) 二進位制數轉換為格雷碼 (gng(n-1)...g2g1g0)。對於最低有效位 (LSB) g0=b0⊕b1,g1=b1⊕b2,g2=b1⊕b2,…… g(n-1)=b(n-1)⊕bn,gn=bn。
示例 − 將二進位制數 111010 轉換為格雷碼。
因此,根據上述演算法,
g0=b0⊕b1 = 0⊕1 = 1
g1=b1⊕b2 = 1⊕0 = 1
g2=b2⊕b3 = 0⊕1 = 1
g3=b3⊕b4 = 1⊕1 = 0
g4=b4⊕b5 = 1⊕1 = 0
g5=b5 = 1 = 1
因此,格雷碼將是 100111。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP