0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Excel]グレイコードをエンコード・デコードする

Posted at

はじめに

軽くグレイコードを取得したい機会があり、Excelを使ってやってみたのでその時の方法について書きます。

グレイコードとは

10進数と2進数とグレイコードの対応表は以下の通りです。
10進数が7から8へ変わる時の、2進数とグレーコードの変化に着目してください。
2進数では各ビットが全て反転していますが、グレイコードは1つしか反転していません。

2進数とグレイコードのビットの変化をみていけばわかるように、2進数では複数ビットが反転することはあっても、グレイコードなら必ず反転するのは1ビットのみです。

| 10進数 | 2進数 | グレイコード |
|:--------:|:------:|:------------:|:-:|:-:|
| 0 | 0000 | 0000 | | |
| 1 | 0001 | 0001 | | |
| 2 | 0010 | 0011 | | |
| 3 | 0011 | 0010 | | |
| 4 | 0100 | 0110 | | |
| 5 | 0101 | 0111 | | |
| 6 | 0110 | 0101 | | |
| 7 | 0111 | 0100 | | |
| 8 | 1000 | 1100 | | |
| 9 | 1001 | 1101 | | |
| 10 | 1010 | 1111 | | |
| 11 | 1011 | 1110 | | |
| 12 | 1100 | 1010 | | |
| 13 | 1101 | 1011 | | |
| 14 | 1110 | 1001 | | |
| 15 | 1111 | 1000 | | |

グレイコードの利点

グレイコードは実際には、回転角を取得できるアブソリュートエンコーダのスリットパターンに利用されていたりします。
上述の通り、ビット反転は必ず一桁のみであるため、2進数の場合に対して読み取り誤差を低減することができます。

本編

10進数→グレイコード

=DEC2BIN(BITXOR(10進数,BITRSHIFT(10進数,1)),桁数)

グレイコード→2進数

素直にvbaで組みました。

Function gray2bin(gray As String) As String
    ans = Left(gray, 1)
    
    For i = 2 To Len(gray)
        tmp = Mid(ans, i - 1, 1) Xor Mid(gray, i, 1)
        ans = ans & tmp
    Next i
    
    gray2bin = ans
    
End Function

以下のように使えます。

=gray2bin(グレイコード)

グレイコード→10進数

=BIN2DEC(gray2bin(グレイコード))

さいごに

読んでいただきありがとうございました。
ご指摘などあれば、勉強させて頂きたいのでどんどんお願いします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?