黑马程序员技术交流社区

标题: 哪位能给我解释下为什么答案是-54 [打印本页]

作者: luke_yang    时间: 2015-1-3 11:20
标题: 哪位能给我解释下为什么答案是-54
class Test1{
        public static void main(String[]agrs){
                byte a;
                a=(byte)(5+197);
                System.out.println(a);

}

}
       
作者: pcy1022    时间: 2015-1-3 12:17
byte的范围是-128至127,a+b的值为202,已经超出了byte的范围,到127后再加1就成了-128,然后继续加,最后结果就是-54了
作者: 王晓杰    时间: 2015-1-3 20:16
丢失精度
作者: luke_yang    时间: 2015-1-4 09:26
王晓杰 发表于 2015-1-3 20:16
丢失精度

没有提示失去精度,但是结果是-54
作者: 羽狼之翼    时间: 2015-1-4 14:12
设num = 197;
则(byte)(num)的值等于(num - 256)
即a=-59;
不管是(byte)(num+5)或(byte)(5+num),只要是num的值超出了byte的取值范围127,
就会等于(5+(num - 256));即a=-54
因为byte里面最多放256个数从-128到正的127。
超出了就减去256,实际上,我认为这是程序在报错,提醒你,超范围了。数值是多少,其实不重要。
作者: luke_yang    时间: 2015-1-4 15:48
羽狼之翼 发表于 2015-1-4 14:12
设num = 197;
则(byte)(num)的值等于(num - 256)
即a=-59;

谢谢 我在运行时候没有报错  所以感到很奇怪




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2