最近突然想知道编译器整数浮球开关是如何实现的,现在很多信息,但遗憾的是甚至没有这方面的记录,所以我决定实现自己的简单的整数浮点转 随着float开启int为例  double转int类似

在做强转之前,你首先得知道浮点数在内存中是怎么存储的,详细能够參考我之前的这篇文章c++中浮点数在内存中的存储方式

有了以上的基础,那么我们直接上代码.代码中我会做出相关凝视,代码非常easy,基本算是通俗易懂

#include<iostream>
#include<math.h>
using namespace std; union Bit
{
float val;//将要强转的值
struct H
{
//为什么这样获取是因为我的机器是小端的原因
//小端简单地说 就是高地址存高位 低地址存低位 结构体成员是向高地址增长的
//所以用例如以下方式获取
unsigned int tail:23;//获取val的最后23位 即尾码
unsigned int offset:8;//获取val的中间8位 即阶码+偏移量
unsigned int flag:1;//获取val的第一位 即符号位
}H;
}; int floatToint(float val)
{
if(abs(val) < 0.000001)//假设为0值 直接返回
{
return 0;
} int ret;//保存返回值
Bit temp;
temp.val = val; int offset = temp.H.offset - 127;//获得偏移量
//cout<<offset<<endl; ret = temp.H.tail;
ret |= 0x00800000;//将丢弃的1填充回来 ret = ret >> (23-offset);//移位操作 舍弃小数点后的数字 if(temp.H.flag == 1)//负数
{
ret = -ret;
} return ret;
}
int main()
{
float val = 0.0;
cout<<floatToint(val)<<endl; val = -16.29;
cout<<floatToint(val)<<endl; val = -0.183;
cout<<floatToint(val)<<endl; val = 12.25;
cout<<floatToint(val)<<endl; return 0;
}

版权声明:本文博主原创文章。博客,未经同意不得转载。

怎么会float交换器int的更多相关文章

  1. 尝试优化骨骼动画计算的意外收获——使用嵌入式汇编对float转int进行优化

    本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/4984530.html 公司引擎目前是使用CPU计算骨骼动画(采用了D3DX提供的函数 ...

  2. 【转】java byte转long、double、float、int、short,或者long、double、float、int、short转byte

    原文网址:http://www.xuebuyuan.com/988752.html java byte与其他数据类型的转换主要用于二进制数据的编码和解码,主要用于网络传输,读写二进制文件,java和c ...

  3. sse float 转int 截断和不截断

    之前, 我用sse指令, 想把float 型转成int, 不过其中遇到了一些困惑,就是截断和不截断的问题, 这个问题一直困扰我好集体, 最后终于解决了, 原来sse本身就有截断和不截断的指令. _mm ...

  4. Python 实int型和list相互转换 现把float型列表转换为int型列表 把列表中的数字由float转换为int型

    第一种方法:使用map方法 >>> list = [, ] #带有float型的列表 >>> int_list = map(int,list) #使用map转换 & ...

  5. C#二进制与字符串互转换,十六进制转换为字符串、float、int

    /// <summary>     /// 将 字符串 转成 二进制 “10011100000000011100011111111101” /// </summary> /// ...

  6. 神奇:java中float,double,int的值比较运算

    float x = 302.01f;    System.out.println(x == 302.01); //false  System.out.println(x == 302.01f); // ...

  7. float和int转换

    http://blog.sina.com.cn/s/blog_5c6f79380101bbrd.html https://blog.csdn.net/ganxingming/article/detai ...

  8. php float 转int

    round(x,prec) 参数 描述 x 可选.规定要舍入的数字. prec 可选.规定小数点后的位数. <?php echo(round(0.60)); echo(round(0.50)); ...

  9. Python学习(四)数据结构 —— int float

    Python 数字类型 int float 数字常量 int: 一般的整数, long:   长整型,2.x版本需在数字后加 “L” 或 “l” ,表示长整型 如 100000000L: python ...

随机推荐

  1. Redis学习笔记--String(四)

    Redis的第一个数据类型string 1.命令 1.1赋值 语法:SET key value Set key value; > OK 1.2取值 语法:GET key > get tes ...

  2. SpringBoot application.yml logback.xml,多环境配置,支持 java -jar --spring.profiles.active(转)

    趁今天有时间整理了一下 启动命令为 //开发环境 java -jar app.jar --spring.profiles.active=dev--server.port=8060 //测试环境 jav ...

  3. [Algorithms] Binary Search Algorithm using TypeScript

    (binary search trees) which form the basis of modern databases and immutable data structures. Binary ...

  4. MySQL数据导出导入任务脚本

    #!/usr/bin/env python#-*- encoding: utf8 -*- import timeimport osimport mysql.connector #定义一些全局变量  w ...

  5. WPF应用程序启动的问题(自定义Main函数启动)

    问题引入: 一般WPF创建之后可以直接运行并不需要编写Main函数指定入口,但是在开发的过程中会遇到一些情况需要自定义Main让WPF从指定的Main函数中进行启动,这样可能会更好控制一点.但是我们再 ...

  6. [Angular2 Form] Model Driven Form Custom Validator

    In this tutorial we are going to learn how simple it is to create custom form field driven validator ...

  7. 使用C#版本的gdal库打开hdf文件

    作者:朱金灿 来源:http://blog.csdn.net/clever101 最近应同事的请求帮忙研究下使用C#版的gdal库读取hdf文件,今天算是有一点成果,特地做一些记录. 首先是编译C#版 ...

  8. tp5 thinkphp5 index.php隐藏 iis 重写 伪静态

    面临的问题如下: 网上找了个源码,tp5的,公司服务器是iis,源码是隐藏index.php使用了路由,iis默认去找那个路径的文件了,找不到,所以报错了 如果没有iis没有安装"url重写 ...

  9. CoreData使用方法二:NSFetchedResultsController实例操作与解说

    学习了NSFetchedResultsController.才深深的体会到coredata的牛逼之处.原来Apple公司弄个新技术.不是平白无故的去弄,会给代码执行到来非常大的优点.coredata不 ...

  10. JVM源码系列:ThreadMXBean 打出堆栈信息原理分析

    我们通常会使用工具jstack 去跟踪线程信息,其如何实现使用attach 的方式还是ptrace 的方式,这些可以去参考本人的博客的其他文章. 但这些方式都是外部使用的方式,如何直接使用java代码 ...