質問: E*2+bit[i]; } M=bit[32]; for(i=10;i>=31;i++){ M=M/2+bit[i]; } if(E==128&&M==0){ printf("Inf"); }else if(-127
回答: int型が32bit、float型がIEEE754のfloatであるようなC言語処理系を使う前提で、とりあえず動くであろうコード例は割合簡単(というより身も蓋もないコード)なのですが・・・ ``` int bits = 0; for (int i = 0; i < 32; i++) { bits = (bits << 1) | bit[i]; } // この時点で32bitのビットパターンが左の桁をMSBに、右の桁がLSBとなるようにbitsに格納されている float fval = *(float&)&bits; printf("%f\n", fval); ``` 自分が問題として出題する立場なら、上記のようなコードではなく、指数部、仮数部の範囲をしかるべく意識してそれをfloatへ変換するようなコードを求めるかも知れません。そのような回答を得るにはまずIEEE754の形式を理解する必要がありますが、この場では少々回答が長くなりますのでwikipediaのページなどを調べて形式について学んでみてください。 なお、変数unsigned_val、signed_valはchar型の幅(8bit)しかないので、32ビット分を詰め込もうとしても詰め込めません。