C语言中,单精度浮点数十进制时是22.84,转化为16进制是多少,怎么转化的

C语言中,单精度浮点数十进制时是22.84,转化为16进制是多少,怎么转化的,想在界面上输出%x(转化后的),语句是怎样的。能同时以指数形式和非指数形式输出吗?能的话请全部列出。
一共五个问题,一个20分或40分,请分点作答。

整数部分用16除,反向取余数;小数部分用16乘,正向取整数。具体如下:

      22÷16    =    1     余   6

        1÷16    =    0     余   1

    所以整数部分是16。小数部分

      0.84x16   =   13(D)   . 44

      0.44x16   =     7        .04

      0.04x16   =     0        .64

      0.64x16   =   10(A)   .24

      0.24x16   =     3        .84

      0.84x16   =   13(D)   . 44

    ...以后循环了,所以

22.84(10) = 16.D70A3D70A3...(16)

还可以先“用2除反向取余数”和“用2乘正向取整数”变成二进制,再从小数点开始左右每4位分开,前后不足4位的用0补齐,然后用对应的16进制符号直接写出来就可以了。22.84化成二进制是10110.11010111000010100011...→1'0110.1101'0111'0000'1010'0011→0001'0110.1101'0111'0000'1010'0011→16.D70A3...

要写代码,如下便可:

#include "stdio.h"
int main(void){
    double x=22.84,t;
    char h[17]="0123456789ABCDEF", i,k;
    printf("%g(10) = %x.",x,int(x));
    for(t=x-int(x),i=0;i<10;i++){
        k=int(t*=16),t-=k;
        printf("%c",h[k]);
    }
    printf("...(16)\n");
    return 0;
}

 C/C++没有提供以指针形式输出16进制数据的功能。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-05-18
十进制表示成浮点规范化数方法:  对于数n,先化成n=((-1)^s)*(1.x)*(2^k),对于0、无穷等特殊数在浮点数里由特殊的格式表示。然后把s、x、k就填到相应位置就可以了。例如12=((-1)^0)*(1.5)*(2^3),那么s=0,x=5,k=3。至于s、x、k放到哪里就要看你的浮点数遵循那个规则。  十进制表示成浮点规范化数应用:  例如把27/64转为浮点规范化数  27/64=0.421875  用二进制数表示为0.011011=1.1011×e^(-2)  E=e+127=125用二进制数表示为01111101  M=1011  S=0  所以最后结果为:SEM即:00111110110110000000000000000000  ⑵和⑴除了符号其他都一样,即10111110110110000000000000000000
相似回答