基本类型加宽转换的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异常。
byte→char 、short→char、char→short 请问下为什么要排除这几种情况了。 byte i =97; char c =i; 提示精度丢失,应该是加宽,怎么会精度丢失了?能说明白点吗?谢谢原数据的总体信息 不代表精度?
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; 一样会提示精度丢失? 郁闷~资料查找中
我前面说得不准确,呵呵。刚刚查了查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”。
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异常。
请问下为什么要排除这几种情况了。
byte i =97;
char c =i;
提示精度丢失,应该是加宽,怎么会精度丢失了?能说明白点吗?谢谢原数据的总体信息 不代表精度?
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;
一样会提示精度丢失?
郁闷~资料查找中
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”。
byte -128--127
char 0--65535