zoukankan      html  css  js  c++  java
  • 重学C第八节:浮点数未结束

    浮点数?浮点数是什么?浮点数就可以理解为小数。

    OK,那什么单精度,双精度又是什么意思呢?都是小数,就是后面能跟的尾巴不一样而已,看谁长。

    1 #include <stdio.h>
    2 
    3 void main()
    4 {
    5     float m=3.14;
    6     float n=3.141592653;
    7     printf("m=%f \n",m);
    8     printf("n=%f \n",n);
    9 }

    结果是:

    1 m=3.140000
    2 n=3.141593

    看来浮点数也是一样啊,装太多就装不下了。

     1 mov     [ebp+var_4], 4048F5C3h
     2 mov     [ebp+var_8], 40490FDBh
     3 fld     [ebp+var_4]
     4 sub     esp, 8
     5 fstp    [esp+5Ch+var_5C]
     6 push    offset Format   ; "m=%f \n"
     7 call    _printf
     8 add     esp, 0Ch
     9 fld     [ebp+var_8]
    10 sub     esp, 8
    11 fstp    [esp+5Ch+var_5C]
    12 push    offset aNF      ; "n=%f \n"
    13 call    _printf

    额,这次变化太大,看不出来了,还是F5看下

     1 int __cdecl main()
     2 {
     3   char v1; 
     4   float v2; 
     5   int v3; 
     6 
     7   memset(&v1, 0xCCCCCCCCu, 0x48u);
     8   v3 = 1078523331;
     9   v2 = 3.1415927;
    10   printf("m=%f \n", 3.1400001);
    11   printf("n=%f \n", v2);
    12   return _chkesp();
    13 }

    我勒个去,看来得研究下浮点数在内存中的存放形式了。

    根据IEEE的标准,浮点数的定义如下

                        符号位             指数位             小数部分           指数偏移量 

      单精度浮点数 [31]               8位 [30-23]           23位 [22-00]        127 

      双精度浮点数 [63]                11 [62-52]         52 [51-00]         1023 

    不过看起来还不是很完整,留下等待补充。

    ====================================================================================

    Release:

     1 ; int __cdecl main(int argc, const char **argv, const char **envp)
     2 _main proc near
     3 push    1074339512
     4 push    1610612736
     5 push    offset aMF      ; "m=%f \n"
     6 call    sub_401030
     7 push    1074340347
     8 push    1610612736
     9 push    offset aNF      ; "n=%f \n"
    10 call    sub_401030
    11 add     esp, 18h
    12 retn
    13 _main endp

    看起来更邪恶。

    随带用OD看了下

     1 00401000  /$  68 B81E0940   push 0x40091EB8
     2 00401005  |.  68 00000060   push 0x60000000
     3 0040100A  |.  68 38904000   push rl008.00409038                      ;  ASCII "m=%f 
     4 "
     5 0040100F  |.  E8 1C000000   call rl008.00401030
     6 00401014  |.  68 FB210940   push 0x400921FB
     7 00401019  |.  68 00000060   push 0x60000000
     8 0040101E  |.  68 30904000   push rl008.00409030                      ;  ASCII "n=%f 
     9 "
    10 00401023  |.  E8 08000000   call rl008.00401030
    11 00401028  |.  83C4 18       add esp,0x18
    12 0040102B  \.  C3            retn

    唉,还是哪天回去翻翻书吧。

  • 相关阅读:
    [bbk5102] 第38集 第四章 Flashback Database 02
    index
    [bbk5110] 第41集 第四章 Flashback Database 05
    支持向量机SVM基本问题
    凸优化小结
    博客基本操作
    感知机vs支持向量机
    PAYPAL商户集成指南-IPN&PDT变量列表
    一个IBM人的离职泪:伟大公司,SB老板,苦逼员工 (zz.IS2120.BG57IV3)
    Google Reader 7.1停止服务
  • 原文地址:https://www.cnblogs.com/tk091/p/2483600.html
Copyright © 2011-2022 走看看