在线急等 short i=97; char c = i;为什么会提示精度丢失?

ztpia 2005-12-18 10:34:47
在JAVA中.Short型在内存中是2个字节.char在内存中也是2个字节.为什么我转换的时候它还要提示精度可能丢失而要求我强制转换啊?
byte i =97;
char c =i;
也会提示精度丢失?
请问这是为什么了?
...全文
234 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
725137 2005-12-19
  • 打赏
  • 举报
回复
to:
studyflex(严)

byte → short, int, long, float, or double
short → int, long, float, or double
char → int, long, float, or double
int → long, float, or double
long → float or double
float → double
double X

??????
int i=97;
char c=i;
一样会提示精度丢失?


郁闷~资料查找中
itjourney 2005-12-19
  • 打赏
  • 举报
回复

byte -128--127
char 0--65535
renkunpong 2005-12-19
  • 打赏
  • 举报
回复
mark
晨星 2005-12-19
  • 打赏
  • 举报
回复
我前面说得不准确,呵呵。刚刚查了查Java语言标准(The Java Language Specification 3.0),也明白了。
Java不像C和C++那样有许多标准未定义的东西,对基本的数据类型,Java对字长、符号、范围等都做了非常明确规定。
在Java中,char是16bit长的无符号整数,因此范围是:0~65535,而short则是16bit长的带符号整数,范围是-32768~32767。
所以,两者虽然字长相同,但意义却不一样(表示范围并不完全重合或包含),因此不管是char转换成short,还是short转换成char,都属于数值的“窄化转换”(Narrowing Primitive Conversion)。
窄化转化都可能“丢失精度”,因此必须强制转换。
虽然,这里的“丢失精度”跟从int到short的丢失精度给人的感觉似乎不一样,但仔细想想也没有什么区别,一方面,char有16个bit表示数值,而short用于表示数值大小的只有15个bit,因此,从char到short会“丢失数值精度”,而另一方面,short有1个bit表示数值的符号,而char却根本没有这么个符号位(所有的bit都用来表示数值大小了),所以从short到char也可能“丢失精度”,只是这里丢失的是有关正负的“精确程度”。

关于“Widening Primitive Conversion”和“Narrowing Primitive Conversion”,可以查阅“The Java Language Specification”。
bear81 2005-12-19
  • 打赏
  • 举报
回复
study
yzhxhwt 2005-12-19
  • 打赏
  • 举报
回复
把基本数据类型的大小和基本数据类型转换看看你就懂了!
ztpia 2005-12-18
  • 打赏
  • 举报
回复
byte→char 、short→char、char→short
请问下为什么要排除这几种情况了。
byte i =97;
char c =i;
提示精度丢失,应该是加宽,怎么会精度丢失了?能说明白点吗?谢谢

原数据的总体信息 不代表精度?
studyflex 2005-12-18
  • 打赏
  • 举报
回复
基本类型加宽转换的19种情况
byte → short, int, long, float, or double
short → int, long, float, or double
char → int, long, float, or double
int → long, float, or double
long → float or double
float → double
double X
这里,从byte、short/char、int、long、float、double排列,向后基本上就是加宽转换。排除:byte→char 、short→char、char→short。加宽转换不会损失原数据的总体信息[有时精度会损失,
如int/long→float、long→double时],不产生任何run-time异常。
ztpia 2005-12-18
  • 打赏
  • 举报
回复
请问下低级和高级是怎么区分的?谢谢
晨星 2005-12-18
  • 打赏
  • 举报
回复
Java中应该只有低级到高级可以直接转换,平级的之间也不能直接转换,而需要强制转换。

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧