A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© luke_yang 中级黑马   /  2015-1-3 11:20  /  1158 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Test1{
        public static void main(String[]agrs){
                byte a;
                a=(byte)(5+197);
                System.out.println(a);

}

}
       

6 个回复

正序浏览
羽狼之翼 发表于 2015-1-4 14:12
设num = 197;
则(byte)(num)的值等于(num - 256)
即a=-59;

谢谢 我在运行时候没有报错  所以感到很奇怪
回复 使用道具 举报
设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,实际上,我认为这是程序在报错,提醒你,超范围了。数值是多少,其实不重要。
回复 使用道具 举报

没有提示失去精度,但是结果是-54
回复 使用道具 举报
丢失精度
回复 使用道具 举报
byte的范围是-128至127,a+b的值为202,已经超出了byte的范围,到127后再加1就成了-128,然后继续加,最后结果就是-54了

点评

回答的好,学习了!  发表于 2015-1-3 13:28
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马