浮点数用十六进制表示方式附C代码 |
您所在的位置:网站首页 › 十六进制记数法 › 浮点数用十六进制表示方式附C代码 |
IEEE754规定 1、 各个位域意义 符号位 指数位 尾数位 1位 8位 23位 2、指数位正负: 当指数小于127(01111111)时为一个负数,反之为一个正数 实数=》小数: 10.625 => 1010.101 ==> 1.010101 * 2的三次方 按照规则填充4字节空间即为: 符号位: 0 指数位: 3 + 127 尾数位: 01010100000000000000000(共23位) 合并得: 0 10000010 01010100000000000000000 == 0x412A0000 float 共计32位,折合4字节 由最高到最低位分别是第31、30、29、……、0位 31位是符号位,1表示该数为负,0反之。 30-23位,一共8位是指数位。 22-0位,一共23位是尾数位。 每8位分为一组,分成4组,分别是A组、B组、C组、D组。 每一组是一个字节,在内存中逆序存储,即:DCBA 27.0表示成二进制为:11011.0 用科学计数法表示为1.10110*2^4,现在我们要的尾数和指数都出来了。 尾数为:1101 10 (删除前面的第一个1,因为用科学计数法表示,二进制中第一个永远都为1,计算机在存储的时候就没有存储这个1,只存储小数点后面的位数) 不足23位,补0,就是1011 0000 0000 0000 0000 000(23位) 指数:为4 。一共8位,可以表示范围是0 ~ 255的无符号整数,也可以表示-128~127的有符号整数。但因为指数是可以为负的,所以为了统一把十进制的整数化为二进制时,都先加上127。 所以:4+127=131 变成二进制就是10000011 27.0用二进制表示就是: 加上第31位的符号位0 就是0100 0001 1101 1000 0000 0000 0000 0000 十六进制就是:41 D8 00 00
再看一个数27.5,二进制为11011.1 1.10111*2^4 尾数(小数点后的数)10111,补够23位 1011 1000 0000 00000000 000 指数:4,加上127,就是131,二进制1000 0011 用二进制表示就是 (符号数位1位)0 (指数位8位)1000 0011 (尾数位23位)1011 1000 0000 00000000 000 写成二进制标准形式:0100 00011101 1100 0000 0000 0000 0000 写成16进制就是41 DC 00 00 uint32_t data2hex(uint16_t data) { uint32_t temp; uint8_t i=0; temp = data;//转存需要计算的数值 while(temp) { temp >>= 1; i++;//计算当前值的尾数占有的位数 } i--;//计算下来,i会多加一次,这儿减掉 temp = data; //再次赋值,准备合并 temp = temp |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |