Gray碼 格雷碼 二進位制

2022-03-13 10:48:18 字數 899 閱讀 4209

以下內容是看了matrix67的關於二進位制的blog(link)的一點總結與摘錄。

gray碼,中文「格雷碼」,是一種特殊的編碼,相鄰兩個格雷碼的二進位制表示中有且僅有一位不同,且 n 階 gray 碼是 0~2^n-1 的乙個排列。

n 階 gray  碼可以由 n-1 階 gray 碼映象翻轉之後最前面加乙個 '1' 得到。

比如 2 階 gray 碼為:

3 階:

這樣就巧妙的實現了相鄰的數只有乙個二進位制位不同。

gray 與 hanoi 塔問題有著密切聯絡,第 i 個 n 階格雷碼改變的是第 x 位,相應的 n 個圓盤的 hanoi 塔在這第 i 步就移動編號為 x 的盤子。

這樣,只要能計算出第 i 個 n 階格雷碼是什麼,就能知道第 i 步的 n 階 hanoi 的移動步驟是什麼。

求出第 i 個 gray 碼非常簡單 : gray(i) = i xor (i shr 1)           [c++] gray[i] = i ^ (i >> 1);

這個證明可以看 matrix67 的blog。

有關 gray碼的題目一道:link

題目大意:給定 n 與 m,要求輸出乙個 2^n 行, 2^m 列的矩陣,裡面填 0~2^(n+m)-1 的所有數字,每個數字與它相鄰的數字的二進位制表示都有且僅有一位不同。 

題目分析:這道題是求乙個「二維」的格雷碼,然而我們有乙個簡便的構造方法,就是每個數字的前 n 位是 n 階格雷碼,後 m 位是 m 階格雷碼。

行與行之間的前 n 位不同,列與列之間的後 m 位不同,這樣,由「一維」格雷碼就輕鬆構造出「二維」格雷碼了~

**如下:

#include using namespace std;

int main()

return 0;

}

格雷碼二進位制轉換

在結構光編碼方法中,有一種格雷碼編碼方法 與二進位制編碼方法相比,格雷碼編碼方法能夠更好的乙隻雜訊干擾,方便糾錯。用格雷碼對三維測量空間進行編碼,在解碼時需要將格雷碼在此轉換成二進位制,方便計算。實現 如下 unsigned binarytogray unsigned num 將二進位制值右移一位,...

二進位制格雷碼與自然二進位製碼的互換

原始網頁 http www.pcdog.com a 19 10 a210086.html 在精確定位控制系統中,為了提高控制精度,準確測量控制物件的位置是十分重要的。目前,檢測位置的辦法有兩種 其一是使用位置感測器,測量到的位移量由變送器經a d轉換成數字量送至系統進行進一步處理。此方法精度高,但在...

二進位制格雷碼與自然二進位製碼的互換

二進位制格雷碼與自然二進位製碼的互換 中國科學院光電技術研究所 遊志宇 在精確定位控制系統中,為了提高控制精度,準確測量控制物件的位置是十分重要的。目前,檢測位置的辦法有兩種 其一是使用位置感測器,測量到的位移量由變送器經a d轉換成數字量送至系統進行進一步處理。此方法精度高,但在多路 長距離位置監...