用十六进制表示出来的代码,考虑到联合体的一些特性。
计算机组成原理中反码补码原码的特性
浮点数表示的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/
时间: 2024-10-10 07:39:37