Yahoo奇摩知識+將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+服務將會轉為唯讀模式。其他Yahoo奇摩產品與服務或您的Yahoo奇摩帳號都不會受影響。如需關於Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。
1 個解答
- 退隱江湖Lv 51 0 年前最佳解答
格雷碼 (Gray code) 最大的特色在於:相鄰的兩個碼,只有一個 bit 的變化。
這個特性使得它在現代的數位通訊領域中有很重要的應用。
格雷碼與二進位碼 (Binary code) 之間可以互相轉換。
可以用運算的,也可以用手工「翻轉」。
既然是在這一版發問,當然是用電腦算囉!(而且 8-bit 用手轉起來很累...)
請參考 http://en.wikipedia.org/wiki/Gray_code 中有詳細的介紹。
以下是簡單的範例程式,是利用公式將一個值轉換成格雷碼:
格雷碼的 Bit(n) = 二進位碼的 Bit(n) XOR Bit(n+1)
4-bit 的輸出結果為:
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000
#include < stdio.h >
#include < stdlib.h >
#define G_BITS 4 // 改成 8 就是題目所需
void GrayCode(int Code, int Bits);
int main(void)
{
int i;
int nMax = 1 << G_BITS;
for (i = 0; i < nMax; i++) GrayCode(i, G_BITS);
system("pause");
return 0;
}
void GrayCode(int Code, int Bits)
{
int i, B;
char G[32] = {0};
for (i = 0; i < Bits; i++)
{
B = Code & 1;
Code >>= 1;
B ^= (Code & 1);
G[Bits-1-i] = 0x30 + B;
}
printf("%s\n", G);
}