float向u8和s8的转换
为什么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的转换相关推荐
- java的int、char、long、float、double对byte的转换,在通信的时候会用到
/** * java的int.char.long.float.double对byte的转换,在通信的时候会用到 * <ul> * <li>文件名称: com.born.util ...
- 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)不懂小编的人 ...
- 将U16类型转换成u32,float,u8字符串
此文章是在modbus数据格式转换上所做的修改,不仅可以用于保持寄存器,也可以用于其他自定义的u16类型的数组 common.h 头文件 #ifndef __COMMON_H #define __CO ...
- 1.浮点数(float)与整型数(int)的转换
1.浮点数(float/double)转整型数(int)----向零舍入 假设定义 float a=1.3,b=1.6,c=2.0; int aa,bb,cc; 使用强制转换 aa=(int ...
- c语言dword转float,vc中float与DWORD的互想转换实现代码
引子:在看<龙书>的时候有个float到DWORD的转换函数不理解. DWORD d3d::FtoDw(float f) { return *((DWORD*)&f); } 背景: ...
- C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/double/float)(全)
首先必须知道u8,s8等数据类型的定义: typedef signed char s8; typedef unsigned char u8; typedef signed short s16; typ ...
- 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; ...
- 十六进制数转换成float类型数据数据的经典代码
最近在研究姿态传感器,发现一段很有意思并实用的代码,再次分享给大家,希望能共同进步 IEEE(Hex 小数和float 转换过程): 下面是转换的程序: float ByteToFloat(unsig ...
- java float转换成long_在Java中如何将float转换为long或int数据类型?
float f=1.2f;double d=Double.parseDouble(String.valueOf(f));System.out.println(d);直接转换会设计到精度问题,所以需要借 ...
最新文章
- 【数据挖掘】数据挖掘算法 组件化思想 ( 模型或模式结构 | 数据挖掘任务 | 评分函数 | 搜索和优化算法 | 数据管理策略 )
- 禁用人脸识别四个月后,旧金山人证明了他们的先见之明
- python朋友圈表白_情人节「告白生成器」来了!这个AI能让偶像对你说情话,过于真实!...
- go语言中结构体与json
- [MySQL 优化] 移除多余的checksum
- SAP UI5 应用开发教程之三十三 - SAP UI5 应用的响应式布局特性(Responsiveness)试读版
- Testner自动化测试平台免费开放啦
- numpy 加速 矩阵相加_Numpy知识
- SPA单页应用的优缺点
- Jetson TX2开发板的调试笔记
- python连接mysql代码_Python连接MySQL的实例代码
- TCP/UDP,SOCKET,HTTP,FTP 简析
- Js参数RSA加密传输,jsencrypt.js的使用
- 智能家居设计原理c语言,基于51单片机智能家居系统设计
- 炉石传说一直显示重新连接服务器,炉石传说一直显示战网开启中 炉石传说卡在启动战网解决办法...
- 计算机科学导论论文文章,计算机科学导论论文(2)
- 重装系统Win7步骤
- Windows10 中 Apple 云盘 iCloud Drive 默认在 C 盘下的存储目录迁移到其他盘符的指定目录
- 我们可以用计算机做的事,2015地球一小时:今晚我们可以做的10件事(中英文版)
- arduino灯光装置_Arduino教程中级 项目一 点亮一盏灯