关于浮点数转换为整数的测试
来源:互联网 发布:网络营销策划经理招聘 编辑:程序博客网 时间:2024/05/25 21:34
#include <stdio.h>int main(void) { float flt = 1.116533e24f; printf("%e\n", flt); printf("%ld\n", (long)flt); /* wrong */ printf("%u\n", *(unsigned long * const)&flt); /* 将浮点数理解为整数 */ return 0;}
/* * 浮点数和整数强制类型转换的模拟测试 */#include <stdio.h>typedef int int32_t;typedef unsigned uint32_t;typedef unsigned char uint8_t;static int32_t float_to_int32(float flt) { uint32_t ret; uint8_t e; ret = (*(uint32_t * const)&flt) & 0x007FFFFF; /* 取23位尾数 */ e = (uint8_t)((*(uint32_t * const)&flt) >> 23); /* 取8位阶码 */ if (ret == 0u) { if (e == 0u) return 0; else if (e == 0xFF) { puts("inf"); return 0xFFFFFFFF; } } else { if (e == 0xFF) { puts("NaN"); return 0; } } ret |= 0x00800000; /* 写入隐藏位1 */ if (e >= 150u) ret <<= e - 150u; else ret >>= 150u - e; if ((*(uint32_t * const)&flt) >> 31) /* 判断符号位 */ ret = -ret; /* 使用一元运算符 */ return (int32_t)ret;}static float int32_to_float(int32_t s32) { uint32_t tmp; uint8_t cnt; if (s32 == 0) return 0.0f; if ((uint32_t)s32 >> 31) tmp = -s32; else tmp = s32; while (tmp) { tmp >>= 1; cnt++; } if ((uint32_t)s32 >> 31) tmp = -s32; else tmp = s32; if (cnt > 24u) tmp >>= cnt - 24u; else tmp <<= 24u - cnt; tmp &= 0xFF7FFFFF; tmp |= (uint32_t)(cnt - 1u + 127u) << 23u; if ((uint32_t)s32 >> 31) /* 写入符号位 */ tmp |= 0x80000000; return *(float * const)&tmp;}int main(void) { float f = -3451.987f; /* 不要超过int32_t的表示范围 */ int32_t s32 = -1234567; /* 不要超过float的7位精度 */ printf("%d\n", (int32_t)f); printf("%d\n", float_to_int32(f)); printf("%f\n", (float)s32); printf("%f\n", int32_to_float(s32)); return 0;}
0 0
- 关于浮点数转换为整数的测试
- 关于浮点数转换为整数的(int )和(int &)形式
- 关于浮点数转换为整数的(int )和(int &)形式
- 浮点数到整数的快速转换
- 浮点数到整数的快速转换
- 浮点数到整数的快速转换
- 浮点数到整数的快速转换
- 浮点数到整数的转换
- 浮点数和整数之间的转换
- 浮点数到整数的快速转换
- 浮点数强制转换为整数高效替代方法
- C语言浮点数和整数转换的分析
- 四极管:浮点数到整数的转换(转)
- python中整数,浮点数和字符串的转换
- ruby中的整数、浮点数、字符串之间的相互转换
- ruby中的整数、浮点数、字符串之间的相互转换
- ruby中的整数、浮点数、字符串之间的相互转换
- ruby中的整数、浮点数、字符串之间的相互转换
- SpringMVC——ViewResolver
- linux:英文界面转中文
- PermGen space错误解决方法
- 用树莓派DIY天气检测站
- 【年终总结】畅途网
- 关于浮点数转换为整数的测试
- 对Windows磁盘写操作的理解
- 初窥c++11:lambda函数及其用法
- 寒假第二弹之莫比乌斯反演
- WebKit之Chromium加载网络加速初步研究
- iOS开发中图片的一些处理操作(背景色,透明度,合成,大小)
- Windows开启NTP服务
- ListView中的item存在EditText时,焦点问题及输入内容保存解决方法
- Unity Toast插件(UGUI版)