プロが教えるわが家の防犯対策術!

グレイコードを以下のように、バイナリーコードに変換する処理を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進数表記に変換する処理をどのように書いたらいいのかが、ちゃんとわかってはいないので、ぜひ回答をお願いします。

A 回答 (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;
}
}
    • good
    • 0

#3 の変形だけどこっちのほうがきれいか:


#include <limits.h>

/* .... */

for (int shift = 1; shift < sizeof x * CHAR_BIT; shift <<= 1)
x ^= x>>shift;

もちろん x は unsigned な整数限定で.
    • good
    • 0

32ビットなら


for (int i = 0; i < 5; ++i) /* n.b. 1<<5 >= 32 */
x ^= x>>(1<<i);
    • good
    • 0

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;
}
    • good
    • 0

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

28. //グレイコードをバイナリへ変換
です
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!