読者です 読者をやめる 読者になる 読者になる

opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

グレイコードとか

割りと最近計算機システムで習ったグレイコード
ハードもやりたいとか言いつつソフトばかりしてる上に大した事をしてないので知らなかったがそういうものがあるらしい。
ハミング距離が1となる特徴がある。

※ハミング距離とは
教科書の言葉を借りると、2つのコードの各ビットを比較した時反転しているビットの個数 ということ。
つまりハミング距離が1というのはコードの変化が一箇所のみということ。
例えば普通の2進数で00 -> 01は一箇所しか変わってないのでハミング距離が1である。

ということでグレイコードはこれが常に1箇所しか変化しないので

+----------------------------+  
|      Binary |    Gray Code |  
|        0000 |         0000 |  
|        0001 |         0001 |  
|        0010 |         0011 |  
|        0011 |         0010 |  
|        0100 |         0110 |  
|        0101 |         0111 |  
|        0110 |         0101 |  
+----------------------------+  

という具合に変化する感じ。

で、wikipedia先生によると次のような手順で2進数からグレイコードへは変換が可能なようだ。
[変換したい2進数] XOR [変換したい2進数>>1]

ということで、実際にRubyで書いてみた

#!/usr/bin/env ruby 
#-*- encoding:utf-8 -*-

puts "Please input binary number"
num = gets.to_i(2)
puts "Your Input -> B=#{num.to_s(2)},D=#{num.to_s()}"
puts "GrayCode -> #{(num^(num >> 1)).to_s(2)}"

ということで今日はこんな感じ

逆はどうするんだろうね?

Firefox ブラウザ無料ダウンロード