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

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

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

Number of 1 Bits (求32位二进制数中1的)

<span style="font-size:24px;"> </span> 1.题目: Write a function that takes an unsigned integer and returns the number of '1' bits it has (also known as the Hamming weight). For example, the 32-bit integer '11' has binary representation

微软的操作系统中让 32 位支持大于 4GB 的内存。

先给一个参考文献:The RAM reported by the System Properties dialog box and the System Information tool is less than you expect in Windows Vista or in Windows XP Service Pack 2 or later version 先说结论: 1.PAE允许操作系统在32位模式下使用大于4G的物理内存. 2.不管是否使用PAE,对于单个进程而言,32位系统下可见

对cortex –M0芯片LPC11C14XX中的32位定时器使用的一点认识

作者:杨老师,华清远见嵌入式学院讲师. 在LPC11CXX系列的芯片中有2个32位的定时器,可以用来定时或者计数使用.具有1路32位的捕获通 道,当输入信号发生跳变时可以捕获定时器当前的值,也可以产生中断.具有4路外部匹配寄存器和4路外部输出寄存器.而且每个寄存器可以最大允许3个匹配输 出用来作为单边沿PWM输出. 一.定时器初始化时需要配置的寄存器. IOCONFIG:通过配置对应的引脚寄存器来设置和定时器相关的引脚. SYSAHBCLKCTRL:该寄存器用来开启选择的定时器的时钟. TMR3

在64位的linux中运行32位的应用程序

常规做法,先添加32bit架构: sudo dpkg --add-architecture i386 sudo apt-get update sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 然后,你再安装或者直接运行你的32位程序.

64位系统中开启32位应用,特别是OLEDB

IIS7 - Running 32-bit and 64-bit ASP.NET versions at the same time on different worker processes IIS7 - Running 32-bit and 64-bit ASP.NET versions at the same time on different worker processes Rate This  RakkiMK 3 Nov 2007 7:00 AM 24 In IIS6, this w

【转】float类型在内存中的表示

http://www.cnblogs.com/onedime/archive/2012/11/19/2778130.html http://blog.csdn.net/adream307/article/details/7246993 http://wenku.baidu.com/link?url=Q_SYeQffEjdS1cpMXIRncmmhwKA_o2978-0ei1_gz9ym2vrmmBrSEZArpE6tR4yCB9PEHLG_FHRakijbr9-Y0DIK_MTjBUTKoXUh

float类型在内存中的表示

先说一下计算机中二进制的算法: 整数 整数的二进制算法大家应该很熟悉,就是不断的除以2取余数,然后将余数倒序排列.比如求9的二进制: 9/2=4 余 1 4/2=2 余 0 2/2=1 余 0 1/2=0 余 1 一直计算到商为0为止,然后将得到的余数由下到上排列,就得到了9的二进制:1001. 从上面的算法我们可以看到,用整数除以2,最终都能够到0.因此,整数是可以用二进制来精确表示的. 小数 小数的二进制算法和整数的大致相反,就是不断的拿小数部分乘以2取积的整数部分,然后正序排列.比如求0.

arm32位固定指令中怎么容纳32位变量

在ARM指令集汇编码中,32位有效立即数是通过______偶数位而间接得到的 A.循环左移 B.循环右移. C.逻辑左移. D.逻辑右移 答案为循环左移,为什么?还有最好解释一下逻辑移动和循环移动的概念 在ARM指令中,有三个操作数,目的操作数,第一原操作数,第二原操作数,其中最有意思的就是第二原操作数了,在ARM 指令中,第二原操作数共有12位,分成两个部分,一个部分占8位,能表示0-255,另外一个部分占4位,表示第一个部分8位数零扩展成32位的右循环移位,0001右循环移位2位,0010右

在32位、64位操作系统下各数据类型所占的字节数

点击打开链接 在32位.64位系统当中,唯一改变的是指针的长度;在32位系统当中是4个字节.64位则是8个字节.所谓的32位.64位,这个指的是寄存器的位宽. 32位平台下结果: 64位平台下结果: 一.下面几点是值得大家注意的: 1.关于 int 的取值范围,缺省的int数值范围是由编译器设计者决定的,通常都是机器最为自然高效的位数.甚至,我们在32位的机器上,前提没有什么指令可以高效的的处理更短的整型值,我们可以将short.int.long都设置成32位. 2.浮点数在缺省的情况下 表示的