電子書籍の厳選無料作品が豊富!

アルゴリズムと実際のプログラムを教えてください。お願いします

A 回答 (3件)

>ただ、pirntbitというのはなんでしょうか?



今回作った関数の名前です。
適当につけた名前なので検索しても出てこないですよ。
printbit(100); と呼び出せば10進数の100を2進数で表示します。
実際に動くプログラムを書いておきます。

----ここから----
#include <stdio.h>

void printbit(unsigned int n){
unsigned int bit; //ビット比較用
for(bit = 1 << sizeof(int)*8-1; bit > 0; bit >>= 1)
putchar((n & bit)?'1':'0');
putchar('\n');
}

void main(void){
printbit(100);
printbit(0xff);
printbit(1024);
printbit(-1);
printbit(-2);
}
----ここまで----

アルゴリズムの説明
私の環境では unsigned intは4バイト、つまり32ビットです。(intのサイズは環境により異なる場合があります。)

sizeof(int) これは4です。

sizeof(int)*8-1 これは31です。

1 << sizeof(int)*8-1 これは1を左に31ビットシフトしますので、2進数で表示すれば
100000000000000000000000 となります。最上位ビットが1でそれ以外0です。

bit = 1 << sizeof(int)*8-1 ここでbitに先ほどの最上位ビットだけ1の数を代入しています。

n & bit ビット演算のandをとります。nの最上位ビットが0なら0、1ならbitと同じ数になります。
つまりここでnの最上位ビットを調べているわけです。

putchar((n & bit)?'1':'0'); 条件演算子を使って、0(false)なら'0'を表示、0以外(true)なら'1'を表示しています。

bit >>= 1 1回目のループが終わると、bitを右に1ビットシフトします。bitは
010000000000000000000000 となります。上から2ビット目が1で、それ以外0です。

n & bit 2回目のループのこの部分は、上から2ビット目を調べることになります。

以下同様にループを繰り返し、最上位ビットから順に最下位ビットまで表示しています。

000000000000000000000001 最下位ビットを調べた後、bitを右にシフトすると0になります。
bitが0になればループは終了です。

こんな感じですが、ちょっと難しいかな。
    • good
    • 0

10進数を2進数で表示するなら



#include <stdio.h>
void printbit(unsigned int n){
unsigned int bit; //ビット比較用
for(bit = 1 << sizeof(int)*8-1; bit > 0; bit >>= 1)
putchar((n & bit)?'1':'0');
putchar('\n');
}

こんな感じでどうでしょう?
    • good
    • 0
この回答へのお礼

早速のご返答有難うございます。
ただ、pirntbitというのはなんでしょうか?
googleや教科書を見ても詳しい説明がのってなくてわかりませんので
よろしかったら教えてください

お礼日時:2006/11/29 17:39

以下のサイトにC言語でかかれているものがありました。


参考になればと・・。

 C のかけら
 http://www.mnet.ne.jp/~tnomura/C.html

 ビット操作の例。10進->2進変換。
 http://www.mnet.ne.jp/~tnomura/printbits.c

参考URL:http://www.mnet.ne.jp/~tnomura/printbits.c
    • good
    • 0

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