码迷,mamicode.com
首页 > 其他好文 > 详细

将float类型中的32位二进制数用union表示出来

时间:2015-01-22 15:02:16      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:

用十六进制表示出来的代码,考虑到联合体的一些特性。
计算机组成原理中反码补码原码的特性
浮点数表示的IEEE754标准。
对于32位,S(符号位(1)),E(阶码位(8)),M(尾数(23)).
对于64位,S(符号位(1)),E(阶码位11)),M(尾数(52)).
计算方法,符号位,0正1负。阶码位,计算出值减去127为真正的阶码(小数点在数据中的位置).尾数不操作。
如:0 10000010 10010000000000000000000,
step1.0->整数
step2.10000010 ,算得为130,得阶码e为3.隐码为1,有1.1001。
step3.得结果为1.01001小数点右移三位,1100.1,换算成十进制得到12.5

 

#include <stdio.h>
#include <stdlib.h> //union is different from struct , the last element //is its size, it result from the memory structure. //the back elem will overwrite the first. union fbit { float num; struct { char a; char b; char c; char d; }eachbyte; }; typedef union fbit fbitdef; int main() { printf("%d\n",sizeof(fbitdef)); fbitdef fb; fb.num = -2.5; //the sequence is determined by cpu architure. printf("%x %x %x %x\n",fb.eachbyte.d,fb.eachbyte.c,fb.eachbyte.b,fb.eachbyte.a); //printf("%x %x %x %x",fb.eachbyte.a,fb.eachbyte.b,fb.eachbyte.c,fb.eachbyte.d); //printf("%c %s %s",fb.sign,fb.e,fb.m); return 0; } //sizeof return in number "word"

关于代码的思考,输出的结果要求为二进制,想内嵌汇编输出。

mark:http://blog.chinaunix.net/space.php?uid=20564848&do=blog&id=72783

mark:http://www.douban.com/note/57043676/

将float类型中的32位二进制数用union表示出来

标签:

原文地址:http://www.cnblogs.com/x5lcfd/p/4241443.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!