关于Java byte类型取值范围的问题
在下面的代码中涉及到byte的取值范围,我想问一下:byte类型的最大值不是127吗?可是为什么“6!=720”还能输出呢?importjava.io.*;importj...
在下面的代码中涉及到byte的取值范围,我想问一下:byte类型的最大值不是127吗?
可是为什么“6!=720”还能输出呢?
import java.io.*;
import java.io.IOException;;
public class OverFlowException extends Exception
{
public OverFlowException(){super();}
public void printMsg()
{
System.out.println("值已经超出数据类型范围!!");
this.printStackTrace();
System.exit(0);
}
}
public class exception {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
byte n;
int fac=1;
for(n=1;n<10;n++)
{
System.out.print(n+"!=");
if(fac>Byte.MAX_VALUE)
{
try
{
throw new OverFlowException();
}catch(OverFlowException e)
{
e.printMsg();
}
}
else
{
fac=(fac*n);
System.out.println(fac);
}
}
}
} 展开
可是为什么“6!=720”还能输出呢?
import java.io.*;
import java.io.IOException;;
public class OverFlowException extends Exception
{
public OverFlowException(){super();}
public void printMsg()
{
System.out.println("值已经超出数据类型范围!!");
this.printStackTrace();
System.exit(0);
}
}
public class exception {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
byte n;
int fac=1;
for(n=1;n<10;n++)
{
System.out.print(n+"!=");
if(fac>Byte.MAX_VALUE)
{
try
{
throw new OverFlowException();
}catch(OverFlowException e)
{
e.printMsg();
}
}
else
{
fac=(fac*n);
System.out.println(fac);
}
}
}
} 展开
4个回答
展开全部
首先,我想说明下,byte n 的最大值是为127!!!
同时,你说了那个关于6!输出的问题,主要是因为你把他复制给了int形的fac了。而int的类型有多大?21E+!所以必然会输出
而你所使用的n,你给它的最大值是多少?for循环中的10?
总体,我看明白了你的程序,所以我进行了一些修改,给你贴出来,希望对你有帮助,同时也是你所希望得到的答案。
class OverFlowException extends Exception
{
public OverFlowException(){super();}
public void printMsg()
{
System.out.println("值已经超出数据类型范围!!");
this.printStackTrace();
System.exit(0);
}
}
public class Some {
public static void main(String[] args) {
byte n;
int fac=1;
for(n=1;n<10;n++)
{
fac=(fac*n);
if(fac>Byte.MAX_VALUE)
{
try
{
throw new OverFlowException();
}catch(OverFlowException e)
{
e.printMsg();
}
}
System.out.println(fac);
}
}
}
同时,你说了那个关于6!输出的问题,主要是因为你把他复制给了int形的fac了。而int的类型有多大?21E+!所以必然会输出
而你所使用的n,你给它的最大值是多少?for循环中的10?
总体,我看明白了你的程序,所以我进行了一些修改,给你贴出来,希望对你有帮助,同时也是你所希望得到的答案。
class OverFlowException extends Exception
{
public OverFlowException(){super();}
public void printMsg()
{
System.out.println("值已经超出数据类型范围!!");
this.printStackTrace();
System.exit(0);
}
}
public class Some {
public static void main(String[] args) {
byte n;
int fac=1;
for(n=1;n<10;n++)
{
fac=(fac*n);
if(fac>Byte.MAX_VALUE)
{
try
{
throw new OverFlowException();
}catch(OverFlowException e)
{
e.printMsg();
}
}
System.out.println(fac);
}
}
}
展开全部
因为在计算6!的时候,此时参与运算的fac的值是120,fac>Byte.MAX_VALUE(127)为false,所以6!=720仍然会输出,运算结束后,返回的fac是720>Byte.MAX_VALUE,输出结果为7!=值已经超出数据类型范围!!和异常信息。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
byte值运算其会先转为int类型的,你这边输出的是fac,fac为int类型当然能输出喽,如果你赋值给n,那么编译不来,然后可以选择强转(byte)(fac*n)然后能编译了,但其值超过127后的计算的值就不是你想的值了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你逻辑没理清。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询