No.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になればループは終了です。
こんな感じですが、ちょっと難しいかな。
No.2
- 回答日時:
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');
}
こんな感じでどうでしょう?
この回答へのお礼
お礼日時:2006/11/29 17:39
早速のご返答有難うございます。
ただ、pirntbitというのはなんでしょうか?
googleや教科書を見ても詳しい説明がのってなくてわかりませんので
よろしかったら教えてください
No.1
- 回答日時:
以下のサイトに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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
OpenGLの惑星プログラム
-
分数の足し算をさせるプログラ...
-
迷路生成
-
intとlongは同じ?
-
プログラミングに関して
-
当たり判定の処理がわかりません。
-
C言語プログラミング 漸化式に...
-
再起呼び出しの回数をカウント...
-
3のつく数と3の倍数を表示 C言語
-
関数と引数の関係とは?
-
DXライブラリによるパズルゲー...
-
C言語で簡単なパックマンゲーム...
-
2÷3などの余りについて
-
信頼区間の1.96や1.65ってどこ...
-
std::set<int> で、ある値が何...
-
「Aに対するBの割合」と「Aに対...
-
ウィンドウハンドルがメッセー...
-
プログラムでの数字につく”f”の...
-
ある商品のロス率を5%見込み、...
-
10進数からN進数に変換するプロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2の補数を計算するプログラム
-
intとlongは同じ?
-
C言語で簡単なパックマンゲーム...
-
迷路を脱出する経路探索プログ...
-
関数とビット列
-
3のつく数と3の倍数を表示 C言語
-
再起呼び出しの回数をカウント...
-
OpenCVによる4値化について
-
C++で表を作成したいのです ...
-
コマンドプロンプトのウィンド...
-
再帰処理をループ処理に変換
-
画像の拡大・縮小
-
プログラミングに関して
-
【C#】SQL文の中に変数を埋め込...
-
分数の足し算をさせるプログラ...
-
argvのNULLチェック
-
C言語で%を使わない余りの出し方
-
whileとifを使い偶数を出すには
-
ヌメロンのプログラム
-
条件が多い場合
おすすめ情報