int类型转什么类型没有精度损失
发布网友
发布时间:2023-07-11 15:50
我来回答
共2个回答
热心网友
时间:2024-12-11 19:27
如图所示,其中实线byte→short、short→int、int→long、int→double、char→int、float→double转换是不会发生精度丢失的,因为后者所包含的范围比前者大且完全包含前者。
而虚线int转float、long转float,long转double都会发生精度丢失。精度丢失包括两种,一是有效数字丢失,一是目标类型完全无法表示数据
原因如下:
int和float都是32位,但是内存结构也就是存储结构是不一样的,float只有24(含隐含的一位整数位)位来确定精度,而int是32位。long转float,long转double精度丢失原理是一样
详解:
我们知道,float的存储结构是1个符号位,8个指数位,23个尾数。
符号位,表述浮点数的正或者负,0代表正,1代表负。
指数位,实际也是有正负的,但是没有单独的符号位,在计算机的世界里,进位都是二进制的,指数表示的也是2的N次幂,8位指数表达的范围是0到255,而对应的实际的指数是-127到128。也就是说实际的指数等于指数位表示的数值减127。
尾数位,只代表了二进制的小数点后的部分,小数点前的那位被省略了,当指数位全部为0时省略的是0否则省略的是1。
所以可以说,实际上尾数确定了浮点数的精度,而数的大小主要是靠指数位,尾数只有23位,加上隐含的一位整数位便是24位。也就是说int类型的值在2^24以内,float是可以精确表示的,但是当超过这个数的时候就不一定能精确表示了。其他类型也是如此,便不一一啰嗦了
热心网友
时间:2024-12-11 19:28
从short型转换到int类型转换绝不会造成有精度损失。