【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】

今ちょうど期末テストの時期でプログラミングのテストの過去問を解いています。
答えが配られなかったので疑問の部分を質問させてください。
問題文は
10進の整数を16,8,2進数にへんかんするのは、printfのフォーマットでできるが、これを使わないとする。10進数から変換する際には、ビット演算子(<<,&等)を用いるとできる。ビット演算子を用いて、プログラムの変換処理の部分を書け。
という問題でどのようにすればいいのかわかりません。わかる方、おしえてください。

自分は16進数が4ビットだから4ビットシフトさせればいいのかと思いプログラムを作ってみたのですが、それだけではダメのようでした。

A 回答 (4件)

ビットシフトが必要なのは「各桁を取り出す準備」に必要な作業だね。


友人の言っている「&」は実際に取り出す場合に必要な演算だね。

表示は10進数なんだけどコンピュータの中身って2進数なんだよ。
だからビットシフトや論理積とかで各桁を取り出せるんだけど…それが判るようなら組めるね。

手で進数変換演算、やらなかった?あれをプログラムするだけなんだけど…
    • good
    • 0

「変換」とか言ってるから話がおかしくなるんだと思いますが。



たとえば変数 i に i = 32 っていう代入がされてるとして、これを
0x20
040
0010 0000
とか表示するプログラムを作れっていう課題ですよね。これは変換じゃなくて、単に同じ意味の数字を別の表し方で表現しているだけです。

これをprintf()のフォーマット指定子を使う以外の方法で実装しろってことでしょうから、出力したい文字を一文字ずつ求めて putc() かなんかで出していけば課題の意図にそうと思いますよ。ビット演算子使わなくても割り算でできますけど、あえてビット演算使わせてるだけでしょう。
    • good
    • 0

No.1です


すでにNo.2氏が回答しているけど、2/8/10/16進数はPC上では一緒。
それを「画面上に」費用時する時にどうするかというのが問題。
そのヒントはすでにNo.1で回答済み。

>今友達と考えていたのですが、その友達が&をつかったらできるかもといってました。これでもできるのでしょうか?
&だけではできません。
    • good
    • 0

まず、printf()には2進数で表示する出力書式はありません。


とりあえず10進数を2進数に変換して考えます。(2進数への変換はあえて記載しません。)
2進数:2進数が1bit必要。そのビットが「0」か「1」であることを表示
8進数:2進数が3bit必要。0~7でそのまま表せる。
16進数:2進数が4bit必要。0~9まではそのまま表せる。「10=A」~「15=F」で表示する処理を作る。

この回答への補足

すみませんでした。
できるだけまとめようとして2進数もそこに入れてしまいました
正しくは、「ビット演算子を用いて」のあとに16,8,2進数を変換する処理をかけでした。

今友達と考えていたのですが、その友達が&をつかったらできるかもといってました。これでもできるのでしょうか?

補足日時:2009/01/20 16:47
    • good
    • 0

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