2016-11-14 13 views
0

を使用して浮動小数点数を10に変換するバイナリで数値の浮動小数点表現を示すことができ、signbit、指数、および分数が見つかりました。しかし、もしそれをsignbitの基数10に変換したいのであれば、指数部と小数部はどのようにするのでしょうか。ただ、それらを印刷C++ IEEE 754

符号ビット= 0

指数= 130

フラクション= 4194304

#include "stdafx.h" 
#include<stdio.h> 
#include<iostream> 
using namespace std; 
void binary(int n, int i) 
{ 
    int k; 
    for (i--; i >= 0; i--) 
    { 
     k = n >> i; 
     if (k & 1) 
      printf("1"); 
     else 
      printf("0"); 
    } 

} 


typedef union 
{ 
    float f; 
    struct 
    { 
     unsigned int mantissa : 23; 
     unsigned int exponent : 8; 
     unsigned int sign : 1; 
    } field; 
} myfloat; 
int main() 
{ 
    myfloat var; 
    printf("Enter any float number: "); 
    scanf_s("%f", &var.f); 
    cout << "SignBit = "; 
    printf("%d ", var.field.sign); 
    cout << endl; 
    cout << "Exponent = "; 
    binary(var.field.exponent, 8); 
    printf(" "); 
    cout << endl; 
    cout << "Fraction = "; 
    binary(var.field.mantissa, 23); 
    printf("\n"); 
    return 0; 
} 
+0

いくつかの出力例が役に立ちます。 1.840 x 2^-3や2.30 * 10^-1(同じ番号)のようなものを印刷しますか? –

+0

@DietrichEpp例はsignbit = 0、exponent = 130、およびfraction = 4194304 –

+0

のように数字12になります。UBが原因で組合解が間違っています。 – deviantfan

答えて

1

:例 は12のための浮動小数点のようにすることができます。

cout << var.field.mantissa << ' ' << var.field.exponent << ' ' << var.field.sign << '\n'; 
関連する問題