关于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);
}
}

}
}
展开
 我来答
yg359547115
2012-11-04 · 超过29用户采纳过TA的回答
知道答主
回答量:62
采纳率:0%
帮助的人:77.3万
展开全部
首先,我想说明下,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);
}
}
}
风泪浅无痕
推荐于2017-11-25 · TA获得超过125个赞
知道答主
回答量:100
采纳率:100%
帮助的人:77.9万
展开全部
因为在计算6!的时候,此时参与运算的fac的值是120,fac>Byte.MAX_VALUE(127)为false,所以6!=720仍然会输出,运算结束后,返回的fac是720>Byte.MAX_VALUE,输出结果为7!=值已经超出数据类型范围!!和异常信息。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
合江上上
2012-11-05
知道答主
回答量:12
采纳率:0%
帮助的人:20.2万
展开全部
byte值运算其会先转为int类型的,你这边输出的是fac,fac为int类型当然能输出喽,如果你赋值给n,那么编译不来,然后可以选择强转(byte)(fac*n)然后能编译了,但其值超过127后的计算的值就不是你想的值了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
好看邀请YZKHE7
2012-11-05 · 超过14用户采纳过TA的回答
知道答主
回答量:81
采纳率:0%
帮助的人:43.6万
展开全部
你逻辑没理清。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式