将258.369 double值转为内存表示(科学计数法)
前言
庖丁为文惠君解牛,
手之所触, 肩之所倚, 足之所履, 膝之所踦, 砉然向然, 奏刀騞然, 莫不中音, 合于《桑林》之舞, 乃中《经首》之会.
文惠君曰:"嘻, 善哉! 技盍至此乎?"
庖丁释刀对曰:"臣之所好者, 道也, 进乎技矣.
始臣之解牛之时, 所见无非牛者.
三年之后, 未尝见全牛也.
方今之时, 臣以神遇而不以目视, 官知止而神欲行.
依乎天理, 批大郤, 导大窾, 因其固然, 技经肯綮之未尝, 而况大軱乎!
良庖岁更刀, 割也; 族庖月更刀, 折也. 今臣之刀十九年矣, 所解数千牛矣, 而刀刃若新发于硎.
彼节者有间, 而刀刃者无厚;以无厚入有间, 恢恢乎其于游刃必有余地矣!
是以十九年而刀刃若新发于硎.
虽然, 每至于族, 吾见其难为, 怵然为戒, 视为止, 行为迟.
动刀甚微, 謋然已解, 如土委地.
提刀而立, 为之四顾, 为之踌躇满志, 善刀而藏之."
文惠君曰:"善哉, 吾闻庖丁之言, 得养生焉."
测试代码(258.369double值转科学计数法)
- /// @file PositiveFloat.cpp
- /// @brief 将258.369 double值转为内存表示(科学计数法)
- #include <stdlib.h>
- #include <stdio.h>
- int main(int argc, char* argv[]) {
- /// 内存中是小端摆放
- /// 4070,25E0,0000,0000
- unsigned char cBuf[8] = {0x00, 0x00, 0x00, 0x00, 0xe0, 0x25, 0x70, 0x40};
- unsigned short usBuf[4] = {0x0, 0x0, 0x25e0, 0x4070};
- double* pdbl = NULL;
- pdbl = (double*)cBuf;
- printf("%f\n", *pdbl); ///< 258.367188
- pdbl = (double*)usBuf;
- printf("%f\n", *pdbl); ///< 258.367188
- return 0;
- }
- /**
- double值在内存中是8个字节(64bits)
- S = 1bits, (258.369是正数, S = 0)
- E = 11bits
- D = 52bits
- 258.369 double值转内存值
- 整数部分转2进制表示
- 258 / 2
- 129 0
- 129 / 2
- 64 1
- 64 / 2
- 32 0
- 32 / 2
- 16 0
- 16 / 2
- 8 0
- 8 / 2
- 4 0
- 4 / 2
- 2 0
- 2 / 2
- 1 0
- 整数部分的2进制表示为(从最后一个商念到第一个油余数)
- 100000010
- 小数部分转2进制表示(最多只算出8位小数的表示)
- 0.369 * 2
- 0.738 0
- 0.738 * 2
- 1.476
- 0.476 1
- 0.476 * 2
- 0.952 0
- 0.952 * 2
- 1.904
- 0.904 1
- 0.904 * 2
- 1.808
- 0.808 1
- 0.808 * 2
- 1.616
- 0.616 1
- 0.616 * 2
- 1.232
- 0.232 1
- 0.232 * 2
- 0.464 0
- 小数部分的2进制表示(从第一个进位念到最后一个进位)
- .01011110
- 整数 + 小数部分为
- 100000010.01011110 * 2^0
- 1.0000001001011110 * 2^8
- D = 0000001001011110 (不算整数部分的1)
- E = 1023 + 8 (2^8的指数值)
- = 1031
- = 100,0000,0111
- = 10000000111
- E值的2进制表示
- 1031 / 2
- 515 1
- 515 / 2
- 257 1
- 257 / 2
- 128 1
- 128 / 2
- 64 0
- 64 / 2
- 32 0
- 32 / 2
- 16 0
- 16 / 2
- 8 0
- 8 / 2
- 4 0
- 4 / 2
- 2 0
- 2 / 2
- 1 0
- 从最后一个商念到第一个余数
- 100,0000,0111
- 拼装SED
- 0,10000000111,0000001001011110
- 补齐D部分的0(52-16 = 36, 要补36个0)
- 0,10000000111,0000,0010,0101,1110,0000,0000,0000,0000,0000,0000,0000,0000,0000
- 最后的拼装结果
- 0100000001110000001001011110000000000000000000000000000000000000
- 将拼装结果变成16进制
- 0100,0000,0111,0000,0010,0101,1110,0000,0000,0000,0000,0000,0000,0000,0000,0000
- 4 0 7 0 2 5 E 0 0 0 0 0 0 0 0 0
- 407025E000000000
- 4070,25E0,0000,0000
- 16进制对照表
- 0000 = 0 0001 = 1 0010 = 2 0011 = 3
- 0100 = 4 0101 = 5 0110 = 6 0111 = 7
- 1000 = 8 1001 = 9 1010 = A 1011 = B
- 1100 = C 1101 = D 1110 = E 1111 = F
- */
测试代码(-258.369double值转科学计数法)
- /// @file PositiveFloat.cpp
- /// @brief 将-258.369 double值转为内存表示(科学计数法)
- #include <stdlib.h>
- #include <stdio.h>
- int main(int argc, char* argv[]) {
- /// 内存中是小端摆放
- /// C070,25E0,0000,0000
- unsigned char cBuf[8] = {0x00, 0x00, 0x00, 0x00, 0xe0, 0x25, 0x70, 0xC0};
- unsigned short usBuf[4] = {0x0, 0x0, 0x25e0, 0xC070};
- double* pdbl = NULL;
- pdbl = (double*)cBuf;
- printf("%f\n", *pdbl); ///< -258.367188
- pdbl = (double*)usBuf;
- printf("%f\n", *pdbl); ///< -258.367188
- return 0;
- }
- /**
- double值在内存中是8个字节(64bits)
- S = 1bits, (-258.369是负数, S = 1)
- E = 11bits
- D = 52bits
- 258.369 double值转内存值
- 整数部分转2进制表示
- 258 / 2
- 129 0
- 129 / 2
- 64 1
- 64 / 2
- 32 0
- 32 / 2
- 16 0
- 16 / 2
- 8 0
- 8 / 2
- 4 0
- 4 / 2
- 2 0
- 2 / 2
- 1 0
- 整数部分的2进制表示为(从最后一个商念到第一个油余数)
- 100000010
- 小数部分转2进制表示(最多只算出8位小数的表示)
- 0.369 * 2
- 0.738 0
- 0.738 * 2
- 1.476
- 0.476 1
- 0.476 * 2
- 0.952 0
- 0.952 * 2
- 1.904
- 0.904 1
- 0.904 * 2
- 1.808
- 0.808 1
- 0.808 * 2
- 1.616
- 0.616 1
- 0.616 * 2
- 1.232
- 0.232 1
- 0.232 * 2
- 0.464 0
- 小数部分的2进制表示(从第一个进位念到最后一个进位)
- .01011110
- 整数 + 小数部分为
- 100000010.01011110 * 2^0
- 1.0000001001011110 * 2^8
- D = 0000001001011110 (不算整数部分的1)
- E = 1023 + 8 (2^8的指数值)
- = 1031
- = 100,0000,0111
- = 10000000111
- E值的2进制表示
- 1031 / 2
- 515 1
- 515 / 2
- 257 1
- 257 / 2
- 128 1
- 128 / 2
- 64 0
- 64 / 2
- 32 0
- 32 / 2
- 16 0
- 16 / 2
- 8 0
- 8 / 2
- 4 0
- 4 / 2
- 2 0
- 2 / 2
- 1 0
- 从最后一个商念到第一个余数
- 100,0000,0111
- 拼装SED
- 1,10000000111,0000001001011110
- 补齐D部分的0(52-16 = 36, 要补36个0)
- 1,10000000111,0000,0010,0101,1110,0000,0000,0000,0000,0000,0000,0000,0000,0000
- 最后的拼装结果
- 1100000001110000001001011110000000000000000000000000000000000000
- 将拼装结果变成16进制
- 1100,0000,0111,0000,0010,0101,1110,0000,0000,0000,0000,0000,0000,0000,0000,0000
- C 0 7 0 2 5 E 0 0 0 0 0 0 0 0 0
- C07025E000000000
- C070,25E0,0000,0000
- 16进制对照表
- 0000 = 0 0001 = 1 0010 = 2 0011 = 3
- 0100 = 4 0101 = 5 0110 = 6 0111 = 7
- 1000 = 8 1001 = 9 1010 = A 1011 = B
- 1100 = C 1101 = D 1110 = E 1111 = F
- */
http://blog.csdn.net/lostspeed/article/details/50541910
将258.369 double值转为内存表示(科学计数法)的更多相关文章
- double数值多时系统默认科学计数法解决方法
比如 Double d = new Double("1234567890.12"); System.out.println("d:="+d); java.tex ...
- POI导出复杂的excel;excel公共样式类;excel拼接定制类;数据科学计数法转为普通值
一.excel公共样式类(包含数据科学计数法转为普通值) package com.thinkgem.jeesite.common.utils.excel; import org.apache.poi. ...
- 如何使java中double类型不以科学计数法表示
在java中,把一个double或者BigDecimal的小数转换为字符串时,经常会用科学计数法表示,而我们一般不想使用科学计数法,可以通过:DecimalFormat a = new Decimal ...
- c# 科学计数法值转换成正常值,返回字符串
/// <summary> /// 科学计数法值转换成正常值 /// </summary> /// <param name="value">&l ...
- C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现
在C#中大家都会遇到这种情况 double类型的数据,需要格式化(保留N未有效数字)或者是保留N为小数等情况,我们往往采取double.tostring("参数");的方法.下 ...
- Jmeter、Java当double显示的数字过长时取消科学计数法显示
今日,由于项目需要,使用Jmeter发送查询账户并不保存余额,经过交易后,进行运算后再次比对余额. 实施过程中获取了余额字段并赋值给一个double变量.变量进行运算后再与交易后的账户余额进行比对.这 ...
- java中Double类数字太大时页面正常显示而不要用科学计数法
/** * 当浮点型数据位数超过10位之后,数据变成科学计数法显示.用此方法可以使其正常显示. * @param value * @return Sting */ public static Stri ...
- double转成string时,不以科学计数法表示
用gson解析json串的时候,经常会自动把我想用string表示的内容转换成double,并且还是科学计数法,这一点也不科学,写个方法,格式化一下. public static String par ...
- fputcsv 导出excel,解决内存、性能、乱码、科学计数法问题
在PHP的日常开发中,时常会需要导出 excel ,一般我们会使用 PHPExcel ,性能强大,但是在数据量大的时候,phpexcel 性能差.内存溢出等各种不可控问题就会出现.因此,如果对导出样式 ...
随机推荐
- C#自学笔记总结
一.变量:声明变量的语法:变量类型 变量名; 变量名=值;变量类型 变量名=值: 在使用变量的时候要注意:变量一定要先声明,再赋值,最后使用例子: 变量的特点:1.不能够被重复的声明2.可以被重复的赋 ...
- B - 最大报销额
注意超时问题,一个题可能有很多种方法解决,但是想到解决方法的同时一定要考虑这个方法的复杂度,特别是对于acm的题,有可能出现超时的情况,很浪费时间 正式比赛中就很遗憾,血的教训. 下面贴上超时的代码并 ...
- [转] 解析LayoutSubviews
转自: http://www.cnblogs.com/YouXianMing/p/3897543.html 从百度上搜索了一下layoutSubviews的用处,以下是搜索的结果,当然,笔者是会一一验 ...
- 一步一步重写 CodeIgniter 框架 (7) —— Controller执行时将 Model获得的数据传入View中,实现MVC
1. 实现过程 1) 上一节讲述了 View 视图的加载过程,它是在 Loader 类中加载的,并通过 Include 语句进行包含.那么为了在 View 中传递变量,只需要在 include 语句所 ...
- 联想K82------智能电视行业的野蛮入侵者
智能电视行业近年来“渐入佳境”,一方面得力于智能手机.平板电脑的普及让数码产品的智能化趋势深入人心,智能电视自然成了IT行业的下一个增长点:另一方面则得力于部分企业敢于第一个吃螃蟹,通过他们的创新和开 ...
- tomcat设置IP地址或者域名访问
链接地址:http://jingyan.baidu.com/article/7e440953dc096e2fc0e2ef1a.html 本文介绍如何通过修改tomcat的配置,实现通过IP地址或者域名 ...
- 演练5-5:Contoso大学校园管理系统5
Contoso University示例网站演示如何使用Entity Framework 5创建ASP.NET MVC 4应用程序. Entity Framework有三种处理数据的方式: Data ...
- oracle事务和锁(转)
If you use a SET TRANSACTION statement, then it must be the first statement in your transaction. How ...
- [置顶] 小白学习KM算法详细总结--附上模板题hdu2255
KM算法是基于匈牙利算法求最大或最小权值的完备匹配 关于KM不知道看了多久,每次都不能完全理解,今天花了很久的时间做个总结,归纳以及结合别人的总结给出自己的理解,希望自己以后来看能一目了然,也希望对刚 ...
- Android中连接蓝牙设备时遇到createRfcommSocketToServiceRecord的UUID问题和BluetoothSocket的connect失败
[问题] 折腾: [记录]编写Android中的蓝牙模块驱动和底层HART设备 期间,参考: Bluetooth | Android Developers – ManagingAConnection ...