byte c = 2*2*2*2*2*2*2-1;
short d =2*2*2*2*2*2*2*2*2*2*2*2*2*2*2-1 ;
int e = 2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2-1;
long f=(long)2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2-1;
long g = Long.MAX_VALUE;
System.out.println(c);
System.out.println(d);
System.out.println(e);
System.out.println(f);
System.out.println(g);遇到这样几个问题:
1. byte、short 在定义的时候如果超出范围就会直接报错,但int、long如果超出范围,写的时候不会报错,运行结果为-1,这是为什么呢;
2.第一个long最大值算法必须要加(long),否则结果也是-1,这里为什么要有强转,如果java默认数据类型是int,那也算是向上转型,应该不需要强转才对。知道的请说下,谢谢了。
解决方案 »
- Java初学者
- JSP网页引用JAVA里的方法就报错
- 字节码文件的引用问题???
- 本人想速成java2D绘图,哪位好心人能介绍几个有好教程,尤其是大量源代码下载的网站?不胜感激 。
- 怎样实现使用Socket进行文件的传送?并且能及时反映当前文件传送的进度?
- 请问CMP BEAN和BMP BEAN谁跟其他的BEAN的耦合更松散?
- ado的rs.field("字段名")可以访问任何类型的数据,那吗java里面这种问题如何处理。是不是要先判断类型然后再根据类型来使用相应的getint or getString阿!谢谢了!在线等待!
- 欲贱卖到北京(一java程序员)!
- (新手帖)Java -> RPG /???
- [图文教程]Nutch教程——导入Nutch工程,执行完整爬取 by 逼格DATA
- 这样的功能难易程度是多少?
- java新手,希望得到指导
而是系统自动把超出byte,short范围的数值(数字)自动转换为int类型,所以你要赋值就要强行转换byte b1 = 5; //合法
byte b2 = 300; //非法,因为系统自动把300当作int来处理,所以要强行转换,即
byte b3 = (byte)300; //要这样转换
那long最大值的计算是系统先自动认为是int 才需要强转的么
比如
byte b1 = (byte)128; //结果是-128, 二进制10000000
short s1 = (short)b1; //s1也是-128
LZ可能会觉得short应该是128,二进制应该是00000000 10000000,但是实际上是 11111111 10000000,即符号位向上扩展
所以,第二个long没有强行转换,系统自动把越界的int带符号位向上转型,所以结果也是负的
而第一个long,因为强行把第一个2转换为long,所以后面的结果都按long类型来计算(系统自动转换为最高类型运算)
即
第一个long没有强行转换,系统自动把越界的int带符号位向上转型,所以结果也是负的
而如果强行转换,因为先把第一个2转换为long,所以后面的结果都按long类型来计算(系统自动转换为最高类型运算)
那您的那两句,我可不可以这么理解:
128被默认成是int 强转成byte,因为不在范围,丢失精度变成-128了
-128强转成short,但在范围内所以还是-128那么第一个long最大值的计算就很容易理解了
long a = (long)2的63次方-1; 结果是正确的
long b = (long)(2的63次方-1); 结果肯定是-1终于想明白了数据类型转换了,而且java默认的数据类型是int
至于(long)2的63次方,因为是先把第一个2转成long类型,而java的运算是以最高类型优先,所以后面的运算都转成long型来计算,所以结果没问题
LZ可以好好体会一下的结果long l1 = Integer.MAX_VALUE + 1; //把int结果自动向上转型,带符号位转型
long l2 = (long)Integer_MAX_VALUE + 1; //先把Integer.MAX_VALUE转成long,后面的运算都是long类型运算,所以没有超出long的范围
long l3 = (long)(Integer.MAX_VALUE + 1); //把int计算结果转成long,和l1的效果一样