• 締切済み

プログラミングの問題が分かりません。

Quantの回答

  • Quant
  • ベストアンサー率18% (23/122)
回答No.5

C++で簡潔に #include <bitset> #include <iostream> #include <iomanip> using namespace std; int main() { float f; f = 0.5; cout << "Size of Float : " << sizeof(float) << " byte" << endl; cout << "Size of Int : " << sizeof(int) << " byte" << endl; cout << "f=" << setiosflags(ios::fixed) << setprecision(15) << f << endl; cout << (bitset<32>)*(int *)&f << endl; }

関連するQ&A

  • 浮動小数点表現

    浮動小数点表現の問題で以下の実行結果を元にfloat型変数 f に与えた実数の実際に格納されているビット列を表示するプログラムを作りたいのですが、 #include<stdio.h> main() { float a; scanf("%f",&a); printf("%f",a); } この程度までしか作れません。ポインタを使ってアドレスを表示することは分るのですが…。 どなたか教えていただけると助かります。 実行結果 Size of Float : 4 byte Size of Int : 4 byte f=0.500000000000000 00111111000000000000000000000000

  • 実数について・・・・・・・・

    size of Float:4byte size of Int:4byte f=0.500000000000000 00111111000000000000000000000000 実数がどのように保存されているかを表示するプログラムを書く場合、floatじゃ読めないのでint型で行ったほうがいいですか? f=0.5 どのような感じになりますか? よろしくお願いします。。。。。。。

  • プログラミングがわかりません

    1.多倍長数で表現した整数aとint型で表現した整数xを乗算し、その結果をaに格納するプログラムを作れ。 #include<stdio.h> #define KETA 12 int main(void){ int a[KETA] = { 0, 0, 0, 1, 0, 2, 4, 6, 5, 5, 3, 6}; int x = 512; /*必要な変数があれば適宣宣言しなさい*/ /*多倍長数(c) <-- 多倍長数(a) * int型(x)*/ (ア) 出力省略 return 0; } 実行結果 a = 52462354432 2.多倍長数を用いて1から80までの各整数の階乗を計算し、正しい値を表示するプログラムを作れ。 注意 80の階乗を表現するためには、少なくとも119桁の整数を格納できる多倍長数を用いなければならない。 実行結果 1! = 1 2! = 2 3! = 6 ・・・ 3.多倍長数で表現した整数aとint型で表現した整数xで除算し、その結果をaに格納するプログラムを作れ。 aがxで割り切れない場合に生じるあまりは使用せずに捨ててもよい。 除算の途中で現れる整数はint型で表現できる範囲であることを仮定してもよい。 ソースコード #include<stdio.h> #define KETA 12 int main(void){ int a[KETA] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1}; int x = 365; /*必要な変数があれば適宣宣言しなさい*/ /*多倍長数(a) <-- 多倍長数(a) ÷ int型(x)*/ (ア) return 0; } 実行結果 a = 33823777 2はまったくわかりません 1,3の出力はわかるのですが、計算過程がわかりません 教えてくださいよろしくお願いします。

  • バイト配列からfloat型の数値を構築する方法

    byte型配列 buf[] に先頭から 00 00 80 3F という4バイト分の16進数値が入っているとします。 これはfloat型の 1.0 なのですが、これをfloat型変数に入れたいのです。 float f = (bufdata[0] << 24) | (bufdata[1] << 16) | (bufdata[2] << 8) | bufdata[3]; とすればできると思ったのですが、結果は -32705.0 という値になってしまいます。 int型はこの方法でできたのですが・・・ どこが間違っているのでしょうか。 あるいはもっとスマートな手段があるでしょうか。

    • ベストアンサー
    • Java
  • 共有体でfloat型の数値を2進数へ変換

    実行結果が思ったとおりの値を算出しません。 なぜでしょうか? 回答のほどよろしくお願いいたします。 (例) 小数入力 >5.0 0000 0000 0000 0000 0100 0000 1010 0000 小数入力 >-5.0 0000 0000 0000 0000 1100 0000 1010 0000 (下記ソース) #include<stdio.h> void float_binary(float a); void main (void) { float fl; printf("小数入力 >"); scanf("%f",&fl); float_binary(fl); } void float_binary(float a) { struct float_data{ short int high_byte; short int low_byte; }; union data{ float num; struct float_data bit; }DATA; int i; DATA.num = a; for(i = 0; i<16; i++){ if(i != 0 && i % 4 == 0){ printf(" "); } if(DATA.bit.high_byte < 0){ printf("1"); } else{ printf("0"); } DATA.bit.high_byte = DATA.bit.high_byte << 1; } for(i = 0; i<16; i++){ if(i % 4 == 0){ printf(" "); } if(DATA.bit.low_byte < 0){ printf("1"); } else{ printf("0"); } DATA.bit.low_byte = DATA.bit.low_byte << 1; } }

  • C言語のfloat型変数の値代入と表示について

    float型変数の値代入と表示について質問があります。 #include <stdio.h> int main(void) {  float flVal = 50.456;  printf("float型変数:%f", flVal);  return 0; } 上記を実行すると、「float型変数:50.456001」と表示されました。 また、float flVal = 50.1; と変えて実行すると、「float型変数:50.099998」と表示されました。 それぞれ期待していた結果は、 「float型変数:50.456000」、「float型変数:50.100000」だったのですが 代入した値と結果が微妙に異なる理由は何でしょうか。よろしくお願いします。

  • 64ビットCPUでのプログラミングについて

    64ビットCPUでのプログラミングについて 以下のようなプログラムを実行するとします int a; printf ("%d ", sizeof (&a)); printf ("%d ", sizeof (a)); 僕の期待としては 8 8 という出力結果を期待したのですが、 実際に実行してみると 4 4 となりました。 64ビットのCPUなのになぜアドレスのサイズやintのサイズは32のままなのでしょうか? 詳しい方、どうか教えてください。 ちなみに、実行環境は intel core i5, windows 7, visual studio 2005 です。 よろしくお願いします。

  • 大学のプログラミングの課題

    大学のプログラミングの課題で、また分からないことがあるので 質問させていただきます。 3行3列の正の実数データを入力して、行列の様に出力して、 縦の合計と横の合計を求めるものなんですが、 実行例はこんな感じです 999.99以下の3行3列の正の実数データを入力してください data[0][0]の値? 350.23 data[0][1]の値? 1.0 data[0][2]の値? 503.25 ・・・ 集計の結果は次のとおりである. 350.23 1.00 503.25 : 854.48 625.00 3.14 50.27 : 678.41 999.00 750.75 0.00 : 1749.75 ================================= 1974.23 754.89 553.52 : 3282.64 私の作ったプログラムは以下の通りです。 #include <stdio.h> int main (void) { int i,j; float data[3][3]; float suma,sumb,sumsum=0; printf(" 999.99 以下の3行3列の正の実数データを入力してください\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf("date[%d][%d]の値?",i,j); scanf("%f",&data[i][j]); } } printf("集計の結果は次のとおりである。\n"); for(i=0;i<3;i++) { suma=0; for(j=0;j<3;j++) { suma=suma+data[i][j]; printf("%7.2f ",data[i][j]); } printf(":"); printf("%7.2f ",suma); printf("\n"); sumsum=sumsum+suma; } printf("======================================\n"); for(j=0;j<3;j++); { sumb=0; for(i=0;i<3;i++) { sumb=sumb+data[i][j]; } printf("%7.2f ",sumb); } printf(":"); printf("%7.2f ",sumsum); printf("\n"); } 実行すると、横の合計はうまくいくのですが、 縦の合計(1974.23 754.89 553.52 と出力したいところ)が -107374・・・ と表示されてうまく行きません・・・ どこが間違っているのか分からないので 詳しく教えていただけると嬉しいです。 分かりにくくてすみません・・・(・・;)

  • VC++ windows 64ビットプログラミング

    VC++でのwindows 64ビットプログラミングを勉強しています。 以下のMSDNのページにたどり着き、サンプルプログラムを作りながら確かめているのですが、 http://msdn.microsoft.com/ja-jp/library/3b2e7499.aspx 以下の記述の意味がよく分からないので、教えてください。 ---ここから--- int と long は、64 ビット Windows オペレーティング システムでは 32 ビット値です。 64 ビット プラットフォーム用にコンパイルする必要があるプログラムでは、ポインターを 32 ビット変数に割り当てないように注意してください。 ポインターは、64 ビットのプラットフォームでは 64 ビットなので、ポインターを 32 ビット変数に割り当てると、ポインター値を切り捨てることになります。 ---ここまで--- intとlongのサイズが4バイトでこれは32ビットのときと変わらず、 ポインタのサイズが8バイトに拡張された(これはメモリアドレスが64ビットになったのだから当然)のは理解しているのですが、 http://msdn.microsoft.com/ja-jp/library/94z15h2c.aspx 「ポインターを 32 ビット変数に割り当てる」というのがどういうこと(どういうコード)なのかがわかりません。 こんなことかなとも思ったのですが、これはありえない記述ですよね =============== int a = 0; int *pt = NULL; a = pt; //32ビット変数にポインタを割り当て???(というよりポインタを代入か) error C2440: '=' : 'int *' から 'int' に変換できません。 1> この変換が可能なコンテキストはありません。 =============== 32ビットでは問題にならなくて、64ビットになったから問題になって、どう変えれば問題なくなるのか という感じで説明していただけると分かりやすいのかな思います。 よろしくお願いします。

  • プログラミングの問題が分かりません。どなたか助けて

    こんな問題が出たのですがまったくもってわかりませんだれか助けてください センサーから入力される符号付き8ビット(char)の入力を一定期間ため込み,値が入力される度に,その平均値を計算し続けるシステムを考える.実装の方法にはいろいろ種類があるが,ここでは,配列をリングバッファとして利用する.リングバッファは,実際にデータを蓄える buffer という名の char 型の配列,最後にサンプル値を代入した位置を示す変数 pos という名の int 型の変数および現在のデータの総和を示す int 型変数 sum を要素に持つ構造体で作成する.リングバッファに値が挿入されるときは,以下の作業を行う. pos を一つ増やす pos がバッファのサイズを超えていたら pos を 0 にする sum から pos の位置のバッファの値を引く リングバッファに挿入したい値を pos の位置のバッファに書く 今挿入した値を sum に足す sum をバッファの長さで割り算して平均値を出力する ここでは,効果的な計算のために,リングバッファのサイズを 128 とする.そのため,変数 pos は 0 から 127 までの値を持つことになる. という問題でこのプログラムを書いてみたいのですがわかりません どなたか教えてくれませんか?