鱼C论坛

 找回密码
 立即注册
查看: 2789|回复: 2

关于反汇编问题

[复制链接]
发表于 2012-7-14 12:31:12 | 显示全部楼层 |阅读模式
1鱼币
0012FF58  00 00 C8 42 00 00 A0  ..菳...
0012FF5F  42 00 00 B4 42 00 00  B..碆..
0012FF66  70 42 00 00 8C 42 00  pB..孊.
0012FF6D  00 48 42 00 00 20 42  .HB.. B
0012FF74  00 00 F0 41 00 00 00  ..餉...
0012FF7B  00 00 00 00 00 C0 FF  .......
0012FF82  12 00 29 12 40 00 01  ..).@..   
这个是浮点型数组的a[0]的起始位置;
a 的起始位置为 0012ff58
a[0]=100;
但是我不明白的是00 00 C8 42 占的这4个字节为什么换算成10进制不是100而是200 。
求大侠指教 而整形就不会是这样  

最佳答案

查看完整内容

因为你那个是浮点型~
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-7-14 12:31:13 | 显示全部楼层
因为你那个是浮点型~
  1. 浮点数保存的字节格式如下:

  2. 地址        +0          +1           +2           +3
  3. 内容    SEEE EEEE   EMMM MMMM    MMMM MMMM    MMMM MMMM

  4. 这里
  5. S 代表符号位,1是负,0是正
  6. E 偏移127的幂,二进制阶码=(EEEEEEEE)-127。
  7. M 24位的尾数保存在23位中,只存储23位,最高位固定为1。此方法用最较少的位数实现了
  8. 较高的有效位数,提高了精度。

  9. 零是一个特定值,幂是0 尾数也是0。

  10. 浮点数-12.5作为一个十六进制数0xC1480000保存在存储区中,这个值如下:
  11. 地址 +0     +1     +2     +3
  12. 内容0xC1   0x48   0x00   0x00

  13. 浮点数和十六进制等效保存值之间的转换相当简单。下面的例子说明上面的值-12.5如何转
  14. 换。
  15. 浮点保存值不是一个直接的格式,要转换为一个浮点数,位必须按上面的浮点数保存格式表
  16. 所列的那样分开,例如:

  17. 地址       +0           +1            +2            +3
  18. 格式   SEEE EEEE    EMMM MMMM     MMMM MMMM     MMMM MMMM
  19. 二进制  11000001     01001000      00000000      00000000
  20. 十六进制   C1           48            00            00

  21. 从这个例子可以得到下面的信息:
  22.   符号位是1 表示一个负数
  23.   幂是二进制10000010或十进制130,130减去127是3,就是实际的幂。
  24.   尾数是后面的二进制数10010000000000000000000


  25. 在尾数的左边有一个省略的小数点和1,这个1在浮点数的保存中经常省略,加上一个1和小数
  26. 点到尾数的开头,得到尾数值如下:
  27. 1.10010000000000000000000

  28. 接着,根据指数调整尾数.一个负的指数向左移动小数点.一个正的指数向右移动小数点.因为
  29. 指数是3,尾数调整如下:
  30. 1100.10000000000000000000

  31. 结果是一个二进制浮点数,小数点左边的二进制数代表所处位置的2的幂,例如:1100表示
  32. (1*2^3)+(1*2^2)+(0*2^1)+(0*2^0)=12。
  33. 小数点的右边也代表所处位置的2的幂,只是幂是负的。例如:.100...表示(1*2^(-1))+
  34. (0*2^(-2))+(0*2^(-2))...=0.5。
  35. 这些值的和是12.5。因为设置的符号位表示这数是负的,因此十六进制值0xC1480000表示-
  36. 12.5。

  37. 下面给个例子

  38. #include <stdio.h>
  39. union FloatData
  40. {
  41.     float f;
  42.     unsigned char h[4];
  43. };
  44. void main(void)
  45. {
  46.     FloatData t;
  47.     float temp = 0;
  48.     printf("请输入一个数,输入100表示结束:");
  49.     scanf("%f",&temp);
  50.     t.f = temp;
  51.    printf("%f在内存中的存放为:%2x %2x %2x %2x/n",t.f,t.h[0],t.h[1],t.h[2],t.h[3]);

  52. }
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-14 12:31:43 | 显示全部楼层
求大侠指条出路
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-14 03:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表