3个回答
展开全部
byte a=89
byte b=67
byte c=(byte)(a+b)
byte型最大为127,所以byte c肯定放不下,要加强制转换,不过c的值是-100,因为溢出,可以调用计算器看看。byte为一个字节,八位,最大表示二的七次方减一也就是127;89+67为156,byte放不下,a+b先按int计算,int是32位,四个字节,然后强转为byte,截掉前面24位,就为10011100
首位为一,是负数,即计算机里补码是10011100,补码减一为反码10011011,除去第一位按位取反,为11100100,即-100。
我回答最详细了,还有什么要问的??
byte b=67
byte c=(byte)(a+b)
byte型最大为127,所以byte c肯定放不下,要加强制转换,不过c的值是-100,因为溢出,可以调用计算器看看。byte为一个字节,八位,最大表示二的七次方减一也就是127;89+67为156,byte放不下,a+b先按int计算,int是32位,四个字节,然后强转为byte,截掉前面24位,就为10011100
首位为一,是负数,即计算机里补码是10011100,补码减一为反码10011011,除去第一位按位取反,为11100100,即-100。
我回答最详细了,还有什么要问的??
更多追问追答
追问
能写出具体的步骤和源代码吗
追答
public static void main(String[] args) {
// TODO Auto-generated method stub
byte a=89;
byte b=67;
byte c=(byte)(a+b);
System.out.println(c);
}
主函数,结果显示是-100,然后呢,一步一步解释吧。
展开全部
你为什么要这样干呢?byte的范围是-128到127,你的a+b超出了byte的范围,如果一定要赋值给byte类型,会精度丢失的。
追问
要求输出c的值,并分析说明c值结果出现的原因
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你到底要干嘛?不是就是个加法吗?
更多追问追答
追问
要求输出c的值,并分析说明c值结果出现的原因
追答
你定义的时候就会分配内存存入你要存入的数据,你定义了a,b,c3个内存块,c的内存值则是a+b,一般我们直接就是把他们相加,像String一样把指针指向a的内存值和b的内存值然后相加放入缓存中去,但是byte的取值范围超出了,我们用111110表示127,超过数值我们直接在这个基础上加,跳回-128,-127……
这个是我的个人理解,不知道对不,望大神赐教!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询