- 締切済み
グレイコードの変換
グレイコードを以下のように、バイナリーコードに変換する処理を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進数表記に変換する処理をどのように書いたらいいのかが、ちゃんとわかってはいないので、ぜひ回答をお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
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)
#3 の変形だけどこっちのほうがきれいか: #include <limits.h> /* .... */ for (int shift = 1; shift < sizeof x * CHAR_BIT; shift <<= 1) x ^= x>>shift; もちろん x は unsigned な整数限定で.
- Tacosan
- ベストアンサー率23% (3656/15482)
32ビットなら for (int i = 0; i < 5; ++i) /* n.b. 1<<5 >= 32 */ x ^= x>>(1<<i);
- gerugugu84
- ベストアンサー率37% (29/78)
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)
http://gurizuri0505.halfmoon.jp/develop/csharp/graycode を参照してください、但しコメントに間違いがあります。 >28. //バイナリをグレイコードへ変換 は 28. //グレイコードをバイナリへ変換 です