以下內容是看了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轉換成數字量送至系統進行進一步處理。此方法精度高,但在多路 長距離位置監...