为什么80%的码农都做不了架构师?>>>   

关于float向u8,s8这种类型转换,比较内藏玄机,还是小心为妙,这种级别的优化做了不如不做。

直接float向char类型的做法是用__ftol2_sse命令完成,具体怎么做的就不跟了,想跟也能跟,结果放在al里面,然后move byte到结果。

这里是如果是范围相当,float是char能表示的数结果是正确的,如果是更大的,就是从4个byte中截取一个byte,不会有自动的clamp到边界-128这种。

到了针对unsigned char的表示可以看出使用频繁的loat,store完成的,本身就很慢,尽管c++代码很简洁,但是出来的汇编并不好,结果是截取类的,也是不会clamp。


float a = -10.0f;

004132FE  fld         dword ptr [__real@c1200000 (415850h)]

00413304  fstp        dword ptr [a]

char b = static_cast<char>(a);

00413307  fld         dword ptr [a]

0041330A  call        @ILT+220(__ftol2_sse) (4110E1h)

0041330F  mov         byte ptr [b],al

    unsigned char c = (unsigned char)a;

00413312  fld         dword ptr [a]

00413315  fnstcw      word ptr [ebp-0E6h]

0041331B  movzx       eax,word ptr [ebp-0E6h]

00413322  or          eax,0C00h

00413327  mov         dword ptr [ebp-0ECh],eax

0041332D  fldcw       word ptr [ebp-0ECh]

00413333  fistp       dword ptr [ebp-0F0h]

00413339  fldcw       word ptr [ebp-0E6h]

0041333F  mov         al,byte ptr [ebp-0F0h]

00413345  mov         byte ptr [c],al


parallel studio自带intel 的指令集的文档,很不错

原文链接: http://blog.csdn.net/ccanan/article/details/6224536

转载于:https://my.oschina.net/dtec/blog/44628

float向u8和s8的转换相关推荐

  1. java的int、char、long、float、double对byte的转换,在通信的时候会用到

    /** * java的int.char.long.float.double对byte的转换,在通信的时候会用到 * <ul> * <li>文件名称: com.born.util ...

  2. c语言int转换成float,int怎么转化为float 将 int型变量n转换成float型变量的方法是...

    请问C语言中如何将int转换为float 将 int型变量n转换成float型变量的方法是 A float n B (float )n C float( n) D( float) ( n)不懂小编的人 ...

  3. 将U16类型转换成u32,float,u8字符串

    此文章是在modbus数据格式转换上所做的修改,不仅可以用于保持寄存器,也可以用于其他自定义的u16类型的数组 common.h 头文件 #ifndef __COMMON_H #define __CO ...

  4. 1.浮点数(float)与整型数(int)的转换

    1.浮点数(float/double)转整型数(int)----向零舍入 假设定义 float   a=1.3,b=1.6,c=2.0; int    aa,bb,cc; 使用强制转换 aa=(int ...

  5. c语言dword转float,vc中float与DWORD的互想转换实现代码

    引子:在看<龙书>的时候有个float到DWORD的转换函数不理解. DWORD d3d::FtoDw(float f) { return *((DWORD*)&f); } 背景: ...

  6. C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/double/float)(全)

    首先必须知道u8,s8等数据类型的定义: typedef signed char s8; typedef unsigned char u8; typedef signed short s16; typ ...

  7. c语言 u16 printf,C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/double/float)(全)...

    u16 首先必须知道u8,s8等数据类型的定义: typedef signed char s8; typedef unsigned char u8; typedef signed short s16; ...

  8. 十六进制数转换成float类型数据数据的经典代码

    最近在研究姿态传感器,发现一段很有意思并实用的代码,再次分享给大家,希望能共同进步 IEEE(Hex 小数和float 转换过程): 下面是转换的程序: float ByteToFloat(unsig ...

  9. java float转换成long_在Java中如何将float转换为long或int数据类型?

    float f=1.2f;double d=Double.parseDouble(String.valueOf(f));System.out.println(d);直接转换会设计到精度问题,所以需要借 ...

最新文章

  1. 【数据挖掘】数据挖掘算法 组件化思想 ( 模型或模式结构 | 数据挖掘任务 | 评分函数 | 搜索和优化算法 | 数据管理策略 )
  2. 禁用人脸识别四个月后,旧金山人证明了他们的先见之明
  3. python朋友圈表白_情人节「告白生成器」来了!这个AI能让偶像对你说情话,过于真实!...
  4. go语言中结构体与json
  5. [MySQL 优化] 移除多余的checksum
  6. SAP UI5 应用开发教程之三十三 - SAP UI5 应用的响应式布局特性(Responsiveness)试读版
  7. Testner自动化测试平台免费开放啦
  8. numpy 加速 矩阵相加_Numpy知识
  9. SPA单页应用的优缺点
  10. Jetson TX2开发板的调试笔记
  11. python连接mysql代码_Python连接MySQL的实例代码
  12. TCP/UDP,SOCKET,HTTP,FTP 简析
  13. Js参数RSA加密传输,jsencrypt.js的使用
  14. 智能家居设计原理c语言,基于51单片机智能家居系统设计
  15. 炉石传说一直显示重新连接服务器,炉石传说一直显示战网开启中 炉石传说卡在启动战网解决办法...
  16. 计算机科学导论论文文章,计算机科学导论论文(2)
  17. 重装系统Win7步骤
  18. Windows10 中 Apple 云盘 iCloud Drive 默认在 C 盘下的存储目录迁移到其他盘符的指定目录
  19. 我们可以用计算机做的事,2015地球一小时:今晚我们可以做的10件事(中英文版)
  20. arduino灯光装置_Arduino教程中级 项目一 点亮一盏灯

热门文章

  1. 服务器oracle11g卸载,卸载Oracle11g步骤详解
  2. 安卓饼状图设置软件_话单及银行卡交易智能分析软件
  3. 配置jdk环境 windows
  4. 前端开发学习常用网站网址及介绍(都是免费的)
  5. 建立CentOS 6.9 的Yum本地源
  6. freemarker写select组件报错总结(六)
  7. swift轮播图代码
  8. 学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程
  9. 局域网DVD yum源的制作
  10. 什么是CPI指数和GDP