###質問内容
長さが32の0と1の列を入力して、このビット列の表す実数値を出力するC言語のプログラムで実数表現の仕方はIEEE規格754に従うものと仮定するCプログラムを作成したいのですが、
コンパイルして動作確認したところ正しい値が出てこないです。
どこが間違えているのかわからないです。
IEEE規格754による実数表現を行います。
長さが32の1と0の列を入力してください。:01000001011100000000000000000000
====入力ビット列は次のように解釈できます。
整数として00の値を持ち、
小数点以下0.000000の値を持ちます。
###該当のソースコード
C
1#include<stdio.h> 2#include<stdlib.h> 3int main(void){ 4 int bit[32],i,c; 5 double syosuu; 6 unsigned char unsigned_val; 7 signed char signed_val; 8 9 printf("IEEE規格754による実数表現を行います。\n" 10 "長さが32の1と0の列を入力してください。:"); 11 for(i=31;i>=0; ){ 12 switch(c=getchar()){ 13 case '0': case '1': 14 bit[i--] = c-'0'; 15 break; 16 case ' ': case '\n': case '\t': 17 break; 18 default: 19 printf("無効な文字です.\n"); 20 exit(EXIT_FAILURE); 21 } 22 } 23 24 unsigned_val = bit[31]; 25 signed_val = -bit[31]; 26 for(i=9;i>=0;i--){ 27 unsigned_val = unsigned_val*2+bit[i]; 28 signed_val = signed_val*2+bit[i]; 29 } 30 syosuu=bit[31]; 31 for(i=10;i>=31;i++){ 32 syosuu=(syosuu/2)+bit[i]; 33 } 34 printf("\n====入力ビット列は次のように解釈できます。\n" 35 "整数として%d%dの値を持ち、 \n" 36 "小数点以下%fの値を持ちます。\n", 37 signed_val,unsigned_val,syosuu); 38 return 0; 39}
###発生している問題・エラーメッセージ
IEEE規格754による実数表現を行います。
長さが32の1と0の列を入力してください。:01000001011100000000000000000000
====入力ビット列は次のように解釈できます。
整数として00の値を持ち、
小数点以下0.000000の値を持ちます。
※整数15小数点以下0.000000と出力される予定です
###追記
皆さんの意見を参考にソースコードを組み替えてみました。
ご指導のほどよろしくお願いします。
c
1 2#include<stdio.h> 3#include<stdlib.h> 4int main(void){ 5 int bit[32],i,c; 6 7 printf("IEEE規格754による実数表現を行います。\n" 8 "長さが32の1と0の列を入力してください。:"); 9 for(i=31;i>=0; ){ 10 switch(c=getchar()){ 11 case '0': case '1': 12 bit[i--] = c-'0'; 13 break; 14 case ' ': case '\n': case '\t': 15 break; 16 default: 17 printf("無効な文字です.\n"); 18 exit(EXIT_FAILURE); 19 } 20 signed char E; 21 int M; 22 int x,i; 23 char NaN,Inf; 24 E = -bit[31]; 25 for(i=9;i>=0;i--){ 26 E = E*2+bit[i]; 27 } 28 M=bit[32]; 29 for(i=10;i>=31;i++){ 30 M=M/2+bit[i]; 31 } 32 if(E==128&&M==0){ 33 printf("Inf"); 34 }else if(-127<E && E<128){ 35 x=(-1)^bit[0]*(1+M)*(2^E); 36 printf("%f",x); 37 }else if(M!=0&&E==128){ 38 printf("NaN"); 39 }else{ 40 x=(-1)^bit[0]*M*2^(E+1); 41 printf("x"); 42 } 43 } 44}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。