• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:c言語について)

C言語の整数変換に関する質問

VOTの回答

  • VOT
  • ベストアンサー率45% (11/24)
回答No.4

「変換」とか言ってるから話がおかしくなるんだと思いますが。 たとえば変数 i に i = 32 っていう代入がされてるとして、これを 0x20 040 0010 0000 とか表示するプログラムを作れっていう課題ですよね。これは変換じゃなくて、単に同じ意味の数字を別の表し方で表現しているだけです。 これをprintf()のフォーマット指定子を使う以外の方法で実装しろってことでしょうから、出力したい文字を一文字ずつ求めて putc() かなんかで出していけば課題の意図にそうと思いますよ。ビット演算子使わなくても割り算でできますけど、あえてビット演算使わせてるだけでしょう。

関連するQ&A

  • C言語

    次のプログラムは、自然数を入力して,その約数を表示するものである。ブログラム中の0 ~に適するものを答えなさい。ただし,a%bはaをbで割ったときの会りを求める演算 である。 参考 約数とは、入カした自然数に対して,その数を割り切ることのできる整数である。 例えば、6の約数は、1, 2, 3,6となる。 #include <stdio.h> int main (void) int i, num; printf("自然数を入カしてください。"): scanf ("%d", &num); printf("%dの約数は", num) ; for (i =@;i <= num; i++) ( if (num % i @ 0) { printf ("%d,i@1): printf("です。 ¥n"): return 0; 9 この問題の@の部分に入る数字、記号を教えて欲しいのとなぜそうなるのかも教えていただきたいです(-。-;

  • 【C言語】シフト演算による乗算

    正の整数を二つ読み込み、乗算をシフト演算によって行いたいです。 プログラムを作ったのですが、動きません・・・。強制終了されます。 (例)53×25=53×(2^4+2^3+2^0)  =(53を左に4ビットシフト)+(53を左に3ビットシフト)+(53を左に0ビットシフト) http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4803.txt どこが悪いのでしょうか・・・。

  • C言語について

    「条件演算子(a?b:c)を使って、三つの整数値を読み込んで、その最小値を求めて表示するプログラムを作成せよ」という問題を初心者なりに自分で以下のように解いてみたのですが、もっと簡単に表示できるプログラムがあれば教えてください。 #include<stdio.h> int main(void) { int na,nb,nc,min; printf("整数1:"); scanf("%d",&na); printf("整数2:"); scanf("%d",&nb); printf("整数3:"); scanf("%d",&nc); (na<nb)?min=na:min=nb; printf("最小値は%dです。\n",(nc<min)?min=nc:min); return 0; }

  • C言語初心者です。次の問題で質問です。

    三つの整数値を読み込んで、その最小値を求めて表示するプログラムを作成せよ。 (※if文ではなく、条件演算子を用いよ) if文を用いてのプログラミングは出来ました。 しかし、条件演算子のプログラミングが行き詰りました…。 条件演算子の組み合わせ方が良く分かりません 以下、自分の解答です。(おそらく誤りです) #include <stdio.h> int main(void) { int n1,n2,n3,min; printf("三つの整数を入力してください。\n"); printf("整数1:"); scanf("%d",&n1); printf("整数2:"); scanf("%d",&n2); printf("整数3:"); scanf("%d",&n3); min = (n1>n2>n3) ? n2 : n3; /*ここが分かりません*/ printf("最小値は%dです。\n",min); return 0; } (n1>n2>n3) ? としてしまうと、大小関係の分別が複雑になるので、この書き方は間違っていると思います。(例として、(6>1>4)や(1>6>4)など。) (n1>n2 || n2>n3) ? などと書くのでしょうか?分かりません。 回答お願いいたします。

  • c言語のプログラムについて

    今年からC言語を始めた大学1年生です。レポートで四則計算を行うプログラムを6/19までに作らないといけないです。使えるのは今までに習った選択型、反復型、関数scanfです。このプログラムの留意点は次の4つです。 1.使う演算を選択してもらう   例えば   どんな演算をしますか? 1:+,2:-,3:*,4:/ (選択) 2.演算を行う数値を入力してもらう   例えば   a + b の計算をします。aを入力してください。 3.演算結果を表示する   ○+○の答えは ○です 4.計算終了か、それともほかの演算を行うか 決める   0:計算終了 1:他の計算を行う を選択してください  以下のプログラムはこのことを留意してプログラムをつくりました。どこがおかしいのでしょうか。 #include<stdio.h> main() { short a,b,m,n; long c,d,e,f; c = a + b; d = a - b; e = a * b; f = a / b; m = 1; printf("整数を入力してください:"); scanf("%d",&a); printf("どんな演算をしますか?:"); printf("1: +,2: -,3: ×,4: ÷ :"); scanf("%d",&n); while(m=1){ if(n<=4){ while(m=1){ switch (n<=4){ case 1: printf("整数を入力してください:"); scanf("%d",&b); printf("%d + %d = %d \n",a,b,c); break; case 2: printf("整数を入力してください:"); scanf("%d",&b); printf("%d - %d = %d \n",a,b,d); break; case 3: printf("整数を入力してください:"); scanf("%d",&b); printf("%d × %d = %d \n",a,b,e); break; case 4: printf("整数を入力してください:"); scanf("%d",&b); printf("%d ÷ %d = %d \n",a,b,f); break; } } } else { printf("計算できません。"); printf("演算をやり直してください。\n:"); } } printf("計算を終了しますか、それとも他の計算を行いますか?:"); printf("0:計算終了,1:他の計算を行う:"); scanf("%d",&m); printf("計算を終了します。\n"); } 提出期限があるのでなるべく早めのご回答待ってます。生意気言ってすいません。

  • C言語のscanf文について

    C++言語の勉強中で、ビット演算子のところで質問です。 動作は、キーボードから16進データを入力して、そのデータの3,4ビット目を0にした時のデータを算出するというものです。 ここでProgram中の scanf 文にてエラーが出てしまいます。 ①%X(16進数)の型がintに対して、ope変数がcharとなっている。  ⇒ここの整合を取るためにはどういう方法がありますでしょうか? 以下がProgramです。 /*************************************************************/ /* プログラム:ビット演算子 */ /* 動作内容 :ビット演算子によりビット操作する */ /* 入力データの3,4ビット目を0にした値を算出する */ /**************************************************************/ #include<stdio.h> int main(void) { unsigned char ope; unsigned char ans; printf(" Hex-Data : "); scanf("%X", &ope); printf(" ope : 0x%02X\n", ope); ans = ope & 0xe7; /* 3,4ビット目:0 */ printf(" ope & 0xe7 = 0x%02x\n", ans); getchar(); getchar(); return(0); }

  • C言語の問題

    以下はC言語の問題です。お教えください。 1000以下の素数を求めるプログラム prog.c を作成せよ。各素数を整数4桁で出力し、15個の素数を出力した時点で改行処理 を行うこと。作成したプログラムを提出せよ。 です。 僕の考えでは、 #include <stdio.h> #include <math.h> main(){ int i; int j; int ix; int k; printf("正の整数を入力して下さい: "); scanf("%d",&i); ix=(int)(sqrt((double)i)); k=0; for(j=2;j<=ix;j++) { if(i%j==0) { k=1; } } if(k==0) { printf("%d は素数です\n",i); } else { printf("%d は素数ではありません\n",i); } となると思うのですが。どうやら違うようです。全然わからないので、正しい答えを教えてください。

  • C言語初心者です。次の問題で質問です。

    (問題) 二つの整数値を読み込んで、それらの値の差が10以下でなければ、「それらの差は10以下」そうでなければ「それらの差は11以上」と表示するプログラムを作成せよ。ただし、論理OR演算子を用いること。 (自分の解答) #include <stdio.h> int main(void) { int n1,n2; printf("2つの整数を入力してください\n"); printf("整数1:"); scanf("%d",&n1); printf("整数2:"); scanf("%d",&n2); if ( (n1-n2) <= 10 || (n1-n2) >= 11) { /*ここがわかりません*/ printf("それらの差は10以下です。"); } else { printf("それらの差は11以上です。"); } return 0; } 論理OR演算子の使い方が分かりません。 解答お願いいたします。

  • C言語でのプログラミングの問題が分かりません。

    C言語でのプログラミングの問題が分かりません。 課題で出た問題なのですがわからないのでおしえてください。 問題は 値を入力します(nとします) nが1でない間、以下の処理を繰り返します。  (1)nが偶数のとき、nを2で割り、その答えを新しいnとします。  (2)nが奇数のとき、nを3倍してから1を加え、その答えを新しいnとします。 というものです。 if文を使い計算はできたのですが、「繰り返し」と「新しいnとする」部分が分かりませんでした。作成したプログラムを載せるので手直しお願いいたします。 int n,x,y; printf("整数を入力"); scanf("%d",&n); while (n>1) if (n%2) printf("%d",x=n*3+1); else printf("%d",y=n/2); putchar('\n'); return(0); です。このままだと無限ループしてしまうので繰り返しの条件が悪いみたいです。 それと、答えをnに入れたいのにx、yを使ってしまっています。 回答お願いします。

  • C言語で困っています。

    正の整数を入れたときに、階乗を求めるプログラムを作りたいのですが、 ↓のプログラムを起動させたら、最終的な答えが1(kaizyo=1)になって、非常に困っています。 何故なのでしょうか?それと、どこを直せばいいですか? #include<stdio.h> main() { int x; int kaizyo=1; printf("整数を入力して下さい:"); scanf("%d",&x); if(x<=0) { printf("値が不適当です。"); } else { while(x<1) { kaizyo=kaizyo*x; x=x-1; } printf("%dの階乗は%dです。",x,kaizyo); } }