JAVA Char类型强制转换情况int、long转float、double的精度丢失问题

编程入门 行业动态 更新时间:2024-10-28 10:32:41

JAVA Char类型强制转换情况int、long转float、double的<a href=https://www.elefans.com/category/jswz/34/1769184.html style=精度丢失问题"/>

JAVA Char类型强制转换情况int、long转float、double的精度丢失问题

By Mejias

  • 一、Char类型和强制转换为short  byte类型

  1. 超出short类型存储范围的char值转换为short

Eg;举一个char值为'\uf800';这个值为63488。

用两个无符号的byte存储空间表示为:1110 1110 0000 0000

转换为short类型,有符号的2byte存储:1110 1110 0000 0000

Short类型下表示的值为:= -(32768*2-63488)=-2048

由以上可知,超出short存储范围的char转换为short为有符号存储,成为负数。

2.超出byte类型存储范围的char值转换为byte

A:当char的取值范围为>=128 && <256时:

Eg:举一个CHAR值为’\u0080’:实际数为128

此范围内可用一个无符号Byte空间存储,该例子存储为:1000 0000

转换为Byte类型,有符号的1Byte存储,1000 0000

Byte类型下实际表示的数为:-128

   B:当char的取值范围为 >=256时:

Eg1:举一个char值为'\u0100':实际数为256

此范围用无符号二进制表示为:1 0000 0000

用byte类型存储时溢出,剩余后8位存储成功,为:0000 0000

Byte类型下实际表示的数为:0

Eg2:举一个char值为'\uf807':实际数为63495

此范围用无符号二进制表示为:1110 1110 0000 0111

用byte类型存储时溢出,剩余后8位存储成功,为:0000 0111

Byte类型下实际表示的数为:7

由上可知,char的取值范围为>=128&&<256时,强制转换为Byte类型成为负数;

Char的取值范围为 >=256时,强制转换为Byte类型将溢出。

  • 二、Int、long类型转换为float或者double类型的探讨

1.int类型转换为float类型进度丢失的问题

单精度浮点型

IEEE754标准中,float用四个字节表示,即为32位

符号位(S)

阶码(E)

尾数(M)

1

8

23

当尾数M有效位全为1时,即为 1111 1111   1111 1111   1111 111

实际表示地小数为 1.1111 1111   1111 1111   1111 1111   1111 111

当这个数表示一个正整数时:

则1.1111 1111   1111 1111   1111 111*2^23//小数点移23位

E的阶码表示的数为 127 + 23 = 150,无符号8位二进制数表示为:1001 01100

整个浮点数的二进制的表示为:

1100 1011   0111 1111   1111 1111   1111 1111

此时这个数表示的是16777215.0

A:当int类型的值>16777215时

Eg1: 16777218

二进制表示为:1 0000 0000  0000 0000   0000 0010

转换为浮点法表示为: 1. 0000 0000  0000 0000   0000 001 * 2^24

Eg2:16777219

二进制表示为:1 0000 0000  0000 0000   0000 0011

转换为浮点法表示为: 1. 0000 0000  0000 0000   0000 001 * 2^24(超出23位的部分被舍弃)

B:当int类型的值<=16777215时

由于用23位有效位可表示所有的数,因此不会出现精确值不准的问题。

Eg:16777213

由上可知大于16777215的int数转换为float数,会出现精确值不准的问题;

小于等于16777215的int数转换为float数,不会出现精确值不准的问题。

2.long类型转换为double类型精度丢失的问题

同上论述可证明,double类型的值(有效位52为.位),

大于9,007,199,254,740,991的Long数转换为double数,会出现精确值不准的问题;

小于等于9,007,199,254,740,991的Long数转换为double数,不会出现精确值不准的问题。

更多推荐

JAVA Char类型强制转换情况int、long转float、double的精度丢失问题

本文发布于:2024-03-09 00:06:04,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1722953.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:精度   类型   情况   Char   JAVA

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!