2進数表示について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 2進数表示について

Re: Re: 2進数表示について

#5

by sa » 7年前

返信ありがとうございます。
勉強になりました。
K&R終わったら, 詳しめのリファレンス買ってわからないところ潰します。

Re: Re: 2進数表示について

#4

by かずま » 7年前

sa さんが書きました:
7年前
一番下の「putchar("01"[x >> --count & 1']);」というのが初めて見るのでよくわからないのですが、文字列リテラルを配列のように扱っているのでしょうか?あと「& 1」のあとの「′」には何か意味がありますか?
すみません。「'」は投稿時に入ったゴミです。

文字列リテラルは const char (または char) の配列です。

コード:

putchar("01"[x >> --count & 1]);

コード:

static const char s[3] = "01";
putchar(s[x >> --count & 1]);
と同じです。

書き方は他にもあります。

コード:

putchar(x >> --count & 1 ? '1' : '0');
また、x >> --count & 1 は
(x >> --count) % 2 と書くこともできます。
x が unsigned なので、コンパイラの最適化により & 1 と
同じコードになるでしょう。

Re: Re: 2進数表示について

#3

by sa » 7年前

0 か 1 だけを表示するのに printf は処理が重いので、
putchar を使うほうが良いと思います。

コード:

putchar(x >> --count & 1 | '0'); または
putchar((x >> --count & 1) + '0'); または
putchar("01"[x >> --count & 1']);
回答ありがとうございます。
一番下の「putchar("01"[x >> --count & 1']);」というのが初めて見るのでよくわからないのですが、文字列リテラルを配列のように扱っているのでしょうか?あと「& 1」のあとの「′」には何か意味がありますか?

Re: 2進数表示について

#2

by かずま » 7年前

sa さんが書きました:
7年前
自分では良い感じにできたつもりなのですが、もっと良いプログラムがあるんじゃないかと思います。
もし、あれば教えていただけませんか?
もっと良いプログラムを問う以前に、そのプログラムでは
「"」が「“」と「”」になっていて、コンパイルエラーになります。

0 か 1 だけを表示するのに printf は処理が重いので、
putchar を使うほうが良いと思います。

コード:

putchar(x >> --count & 1 | '0'); または
putchar((x >> --count & 1) + '0'); または
putchar("01"[x >> --count & 1']);

2進数表示について

#1

by sa » 7年前

C言語で2進数表示を行う関数を作ってみました。
自分では良い感じにできたつもりなのですが、もっと良いプログラムがあるんじゃないかと思います。
もし、あれば教えていただけませんか?
自作のものは下の通りです。

// countはxを2進数表示したときの桁数

コード:

void print_bit(unsigned x, int count)
{
    while(count != 0)
         printf(“%d”, (x >> --count) & 01);
}

ページトップ