将int转换为float/double,然后将其转换回,始终相同
Convert int to float/double and then convert back, always same?
在C 中,我有一个整数,将其转换为float/double,然后将其转换回整数。两个整数是否总是完全相同?假设浮数范围涵盖了整数数字的范围。
作为具体反例,表明float
并非总是如此#include <iostream>
#include <limits>
int main(){
int x = std::numeric_limits<int>::max();
float f = x;
int xf = f;
double d = x;
int xd = d;
std::cout << x << 'n'
<< f << 'n'
<< xf << 'n'
<< d << 'n'
<< xd << std::endl;
return 0;
}
在我的系统输出上
2147483647
2.14748e+09
-2147483648
2.14748e+09
2147483647
不一定是,如果您使用32位整数和32位float(这是相当典型的),则可能会在整数转换为浮子(通常,浮点只有24位可以存储实际的数字(Mantissa))。
但是,由于C中基本类型的确切大小并不是严格定义,因此此转换可能有效(例如,如果将浮子存储为32位的64位和整数)。
。基本上,您感兴趣的系统上整数大小的数字,并确保您使用足够大的Mantissa的浮点数。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 从/到 UTF-8/UTF-16 的转换需要(例如:utf8 -> 代码点,然后代码点到 utf16)或(例如:utf8 -> utf16)?
- 使用 GDI+ 旋转位图,然后转换为 HDC
- 将子字符串字符从字符串值转换为 int,然后将其分配给 int 变量
- 将函数应用于元组中的每个元素,将每个元素强制转换为类型包中的不同类型,然后作为参数包传递
- 检查字符串是否是数字,然后将该数字转换为 int?
- 将 char[] 数组转换为字节,然后将字节转换为 int,反之亦然
- 将多映射转换为空指针,然后转换回多映射
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- 如何将两个 jlong 数据类型转换为 jstring,然后将两个字符串连接在一起以便从 JNI 将字符串返回给 jav
- 将40个字节长的数据框从十六进制转换为二进制,然后转换为十进制
- strtoull() 的输出在转换为双精度然后又转换为 uint64_t 时会失去精度
- 将整数向量转换为字节数组向量,然后调用每个字节数组
- 将无符号字符转换为字符串,然后再次转换为无符号字符
- 将不同的类转换为void*,然后在C 中安全地返回
- 将整数转换为字符数组,然后将其转换回来
- 您如何通过函数的void指针将int值传递,然后将其转换回int值
- 将Space分离的值文本转换为使用C 的.CSV,然后保存
- 获取一个输入字符串,将其转换为其十六进制值,然后将其十六进制存储为 int
- 为什么在C++中向下转换然后分配给基类