• 締切済み

グレイコードの変換

グレイコードを以下のように、バイナリーコードに変換する処理をVisual C++で作ろうとしています。 Gray code  Binary code 0        0 1        1 2        3 255       170 (テキストボックス1に打ち込んだGray codeを変換してテキストボックス2に表示するようにしたい) Gray codeを2進数表記に変換してからBinary codeに変換するのだと思いますが、Gray codeを2進数表記に変換する処理をどのように書いたらいいのかが、ちゃんとわかってはいないので、ぜひ回答をお願いします。

みんなの回答

回答No.5

bitset使えばほとんどコード書かずに済むっしょ。 #include<iostream> #include <bitset> using namespace std; int main() { for ( int n = 0; n < 256; ++n ) { bitset<8> bin(n); cout << bin.to_string() << endl; } }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

#3 の変形だけどこっちのほうがきれいか: #include <limits.h> /* .... */ for (int shift = 1; shift < sizeof x * CHAR_BIT; shift <<= 1) x ^= x>>shift; もちろん x は unsigned な整数限定で.

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

32ビットなら for (int i = 0; i < 5; ++i) /* n.b. 1<<5 >= 32 */ x ^= x>>(1<<i);

回答No.2

2進数表記の方法が知りたいということですかね とりあえず、↓itob()を呼び出せば2進数表記に変換した文字列がとれます。 void itob( int num, char* buffer, int bufferSize ) { if( 1 <= bufferSize ) { int ii = bufferSize - 1; buffer[ ii-- ] = '\0'; while( ii >= 0 ) { if( num & 1 ) buffer[ ii-- ] = '1'; else buffer[ ii-- ] = '0'; num >>= 1; } } } int main() { int n = 99999; // char buffer[ sizeof( int ) * 8 + 1 ]; itob( n, buffer, sizeof( buffer ) ); return 0; }

  • TT414
  • ベストアンサー率18% (72/384)
回答No.1

http://gurizuri0505.halfmoon.jp/develop/csharp/graycode を参照してください、但しコメントに間違いがあります。 >28. //バイナリをグレイコードへ変換 は 28. //グレイコードをバイナリへ変換 です

関連するQ&A