掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.28994

10進から2進数に変換
投稿者---ライタ(2006/11/22 21:34:44)


学校でこういうC言語の問題がでたんですけど一向に解けません。教えてください
ある10進数の値を2進数に変換して表示するプログラムを作成せよ。
ただし、10進数の値は0〜255までの整数とし、2進数は8桁で表示する。

【出力例】

10進数:17
2進数:00010001



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:10進から2進数に変換 28995 たかぎ 2006/11/22 22:20:26
<子記事> Re:10進から2進数に変換 28997 かずま 2006/11/22 22:48:10
<子記事> Re:10進から2進数に変換 29003 . 2006/11/23 11:54:14


No.28995

Re:10進から2進数に変換
投稿者---たかぎ(2006/11/22 22:20:26)
http://takagi.in/


> 一向に解けません。教えてください

一向に解けない理由を教えてください。
10進数や2進数というのがわからないのであれば、C言語ではなく(中学生レベルの)数学の問題ですから、中学校の教科書を見直してください。



この投稿にコメントする

削除パスワード

No.28996

Re:10進から2進数に変換
投稿者---たかぎ(2006/11/22 22:27:48)
http://takagi.in/


>10進数や2進数というのがわからないのであれば、C言語ではなく(中学生レベルの)数学の問題ですから、中学校の教科書を見直してください。

自己レスです。
書いた後に気付きました。現在の中学校の指導要領では、2進法は削除されたんですね。
# 世代間ギャップを感じる...


この投稿にコメントする

削除パスワード

No.28997

Re:10進から2進数に変換
投稿者---かずま(2006/11/22 22:48:10)


このまま提出すると、
「なんだね、これは? 説明したまえ」と言われるプログラム。
#include <stdio.h>

#define B0(x)  B1(x"0"),B1(x"1")
#define B1(x)  B2(x"0"),B2(x"1")
#define B2(x)  B3(x"0"),B3(x"1")
#define B3(x)  B4(x"0"),B4(x"1")
#define B4(x)  B5(x"0"),B5(x"1")
#define B5(x)  B6(x"0"),B6(x"1")
#define B6(x)  B7(x"0"),B7(x"1")
#define B7(x)  x"0",x"1"

int main(void)
{
    int n;  static char b[][9] = { B0("") };

    while (printf("10進数: "), scanf("%d", &n) == 1 && n >= 0 && n <= 255)
        printf("2進数: %s\n", b[n]);
    return 0;
}



この投稿にコメントする

削除パスワード

No.29000

Re:10進から2進数に変換
投稿者---・(2006/11/22 23:31:23)


http://www2.moug.net/bbs/program/20061122000004.htm
http://hpcgi3.nifty.com/mmgames/patio/patio.cgi?mode=view&no=1312

・・・解決したみたい


この投稿にコメントする

削除パスワード

No.29004

Re:10進から2進数に変換
投稿者---かずま(2006/11/23 13:42:36)


「なんだね、これは?」プログラム第二弾。
#include <stdio.h>

void putbin(int n, int k)
{
    if (k > 1) k >>= 1, putbin(n >> k, k), putbin(n, k);
    else putchar((n & 1) + '0');
}

int main(void)
{
    int n;
    while (printf("10進数: "), scanf("%d", &n) == 1 && !(n >> 8))
        printf("2進数: "), putbin(n, 8), putchar('\n');
	return 0;
}



この投稿にコメントする

削除パスワード

No.29015

Re:10進から2進数に変換
投稿者---かずま(2006/11/24 01:08:47)


「なんだね、これは?」プログラム第三弾。
#include <stdio.h>

#define X0(n) (X1((n)>>4)<<16|X1(n))
#define X1(n) (X2((n)>>2)<<8|X2(n))
#define X2(n) (X3((n)>>1)<<4|X3(n))
#define X3(n) ((n)&1)

int main(void)
{
    int n;
    while (printf("10進数: "), scanf("%d", &n) == 1 && !(n >> 8))
        printf("2進数: %08x\n", X0(n));
    return 0;
}

int が 2バイトの処理系の場合は、long で書き直してください。


この投稿にコメントする

削除パスワード

No.29005

Re:10進から2進数に変換
投稿者---επιστημη(2006/11/23 14:00:39)
http://blogs.wankuma.com/episteme/


「なんだね、これは?」 C++版

#include <iostream>
#include <iomanip>
#include <string>
#include <bitset>

using namespace std;

int main() {
  cout << "dec\thex\toct\tbin\n";
  cout.setf(ios_base::uppercase);
  for ( int i = 0; i < 256; ++i ) {
    bitset<8> bit8(i);
    cout << setfill(' ')
         << dec << setw(3) << i << '\t'
         << setfill('0')
         << hex << setw(2) << i << '\t'
         << oct << setw(3) << i << '\t'
         << bit8.to_string() << endl;
  }
}




この投稿にコメントする

削除パスワード

No.29016

Re:10進から2進数に変換
投稿者---かずま(2006/11/24 01:13:15)


>         << bit8.to_string() << endl;

VC++ ではコンパイルできるんですが、gcc や bcc だと、
bitset::to_string() が見つからないと言われます。
operator<<(ostream&, bitset&) はあるようなので、

          << bit8 << endl;

と書いたほうがよいかもしれません。



この投稿にコメントする

削除パスワード

No.29045

Re:10進から2進数に変換
投稿者---かずま(2006/11/24 20:43:53)


>>      << bit8.to_string() << endl;
>
> VC++ ではコンパイルできるんですが、gcc や bcc だと、
> bitset::to_string() が見つからないと言われます。

        << bit8.to_string<char, char_traits<char>, allocator<char> >() << endl;

と書いたらコンパイルできました。なぜこんなことになっているのでしょうか?



この投稿にコメントする

削除パスワード

No.29046

Re:10進から2進数に変換
投稿者---たかぎ(2006/11/24 22:23:57)
http://takagi.in/


> なぜこんなことになっているのでしょうか?

テンプレート実引数を明示的に指定するのが、本来のstd::bitset::to_stringの使い方です。
Visual C++では、テンプレート実引数の指定を省略できるように、いくつかのto_stringが多重定義されているようですが、これは独自拡張だと考えた方がよいでしょう。
ところで、Turbo C++の標準ライブラリも、Visual C++と同じDinkumware製なのに、こちらはテンプレート実引数の指定を省略できないところが罠ですね(むしろその方が、移植性のないコード書かずに済むのでありがたいかも)。



この投稿にコメントする

削除パスワード

No.29048

Re:10進から2進数に変換
投稿者---επιστημη(2006/11/25 01:19:21)
http://blogs.wankuma.com/episteme/


>テンプレート実引数を明示的に指定するのが、本来のstd::bitset::to_stringの使い方です。
>Visual C++では、テンプレート実引数の指定を省略できるように、いくつかのto_stringが多重定義されているようですが、これは独自拡張だと考えた方がよいでしょう。

2005.10.19版 Working Draft には

basic_string< char,char_traits<char>,allocator<char> > to_string () const ;

が定義されてますです。



この投稿にコメントする

削除パスワード

No.29049

Re:10進から2進数に変換
投稿者---かずま(2006/11/25 16:54:24)


たかぎさん、επιστημηさん、どうもありがとうございました。

最初、to_string() が使えなくて、ヘッダファイルを見てみたら、bcc の方は

#define_RWSTD_NO_EXPLICIT_ARGS
#include <bitset>

で、使えることがわかったのですが、
to_string<char, char_traits<char>, allocator<char> > にしたら、
#define なしでよくて、g++ でもコンパイルできるようになりました。
どの処理系でも通る書き方ってむずかしいですね。


この投稿にコメントする

削除パスワード

No.29050

Re:10進から2進数に変換
投稿者---たかぎ(2006/11/25 17:11:06)
http://takagi.in/


>どの処理系でも通る書き方ってむずかしいですね。

移植性のことを考えると、実際に試してみてOKというだけでは不十分で、どうあるべきかを知っていないといけませんからね。
しかも、いちいちそのことを考えながらだと開発効率が悪くて仕方がないので、結局は体で覚えるまで練習するしかないんでしょうね。
# でも、Cならともかく、C++は仕様も膨大なので、体で覚えきれませんね。



この投稿にコメントする

削除パスワード

No.29003

Re:10進から2進数に変換
投稿者---.(2006/11/23 11:54:14)


適当でいいなら、1つづつビットを取り出して表示する。とか。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧