ショッピングモール  掲示板ランキング


【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板1こちら


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

No.3268

10進数に変換(ビット操作)
投稿者---菜0083(2005/01/10 12:25:56)


Borland C++ Compiler 5.5/WinXP
課題で以下のようなものがでました。
以下のプログラムは、長さ4の文字列に数字を初期設定し、
4桁も10進数に変換して表示するものです。
「」に当てはまる値や論理演算子を補ってプログラムを完成しなさい。


<pre>#include &lt;stdio.h&gt;


int main(void)

{
char suuji[5]=&quot;1234&quot;;
unsigned int r1=0,r2;
unsigned int mask=「16進数の値を補う」;
int cnt;
for(cnt=0;cnt&lt;4;cnt++){
r2 = (unsigned int)suuji[cnt];
r2 = r2 「演算子」 mask;
r1 = (r1 「演算子」 3)+(r1 「演算子」 1);
r1 = r1 + r2;
}
printf(&quot;10進数=%u\n&quot;,r1);

return 0;
}





正直、問題の意味がわかりません。
問題の意味がわかる方がいましたらご教授お願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:10進数に変換(ビット操作) 3269 rvrdriver 2005/01/10 12:37:04
<子記事> Re:10進数に変換(ビット操作) 3270 RAPT 2005/01/10 12:58:40


No.3269

Re:10進数に変換(ビット操作)
投稿者---rvrdriver(2005/01/10 12:37:04)


恐らく問題の意味はとして、文字列1234を数値の1234に変換する
という意図だと思います。ということを考えると以下のソースに何を
すればよいのかが見えてくると思います。
直接回答をするのは面白くないので、何をしているところかを
コメントしておきます。

#include <stdio.h>


int main(void)

{   
    char suuji[5]="1234";
    unsigned int r1=0,r2;
    unsigned int mask=「16進数の値を補う」;
    int ont;
    for(cnt=0;cnt<4;cnt++){
        r2 = (unsigned int)suuji[cnt];
        r2 = r2 「演算子」 mask;                 /* 文字を数字に変換 */
        r1 = (r1 「演算子」 3)+(r1 「演算子」 1);/* 前回のループで計算したr1を10倍にする */
        r1 = r1 + r2;                            /* 数値に変換 */
    }
    print("10進数=%u\n",r1);
    
    return 0;
}




この投稿にコメントする

削除パスワード

No.3270

Re:10進数に変換(ビット操作)
投稿者---RAPT(2005/01/10 12:58:40)


> int ont;
int cnt;
じゃないとコンパイルエラーです。(小文字のシーとオーの違い)

> print
printfの間違いでは?


問題についてですが、「そのまんま」としか言いようがありません。


【確認1】前提として、あなたは論理演算子にはどのような演算子
が含まれているか説明できますか?
分からなければ、それをまず確認してください。


【確認2】suuji[0]〜suuji[4]にそれぞれ数字が入っていますが、
これを「数値」で見たとき、いくつが入っているか分かりますか?
分からなければ、調べてください。
#include <stdio.h>
int main(void)
{
  char suuji[] = "1234";
  int i;
  for(i = 0; i < 4; ++i){
    printf("suuji[%d] = %d (16進数=%x)\n", i, suuji[i], suuji[i]);
  }
  return 0;
}


【確認3】「数字」から「数値」に変換します。数値は「0」〜「9」
なので、確認2で得られた値にどんなビットマスクをかければよいか
を考え、ビットマスクパターンを検討してください。
printf("確認例:'0' -> %d ... 0になるでしょうか?\n", '0' & 0x0A);


【確認4】確認3で「数字」から「数値」に変換できました。
桁の繰り上げをする方法を考えます。
数値「1」を数値「10」にするためには、どのように計算する必要が
あるかを考えます。




この投稿にコメントする

削除パスワード

No.3271

Re:10進数に変換(ビット操作)
投稿者---菜0083(2005/01/10 13:59:31)


お二人のヒントを合わせて考えた結果なんとかできました。
ありがとうございます。


この投稿にコメントする

削除パスワード

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




掲示板提供:Real Integrity