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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 严露华 中级黑马   /  2013-4-7 23:06  /  1033 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有三个byte类型的变量a,b,c.已知a的值威127,b的值为3,在执行语句”c=(byte)(a+b)"之后,c的值为几?答案为-126.  看了答案,但没明白是怎么运算出来的,求解?最好有图表示。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

3 个回复

倒序浏览
byte的范围有限(-128~127)对于大于128的数就会溢出,当加1后刚刚是128,这是byte的最大值,也就是说最多就可以加1,加一个比1大的数话就会溢出,溢出后byte会从最小值-128开始存储,就是说在-128的基础上再加上多出的数,此时在从最小值-128在加2,所以结果是-126

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 25分咯~

查看全部评分

回复 使用道具 举报
byte类型的取值范围是:-128-127
127的二进制是:0111 1111
3的二进制是:0000 0011
相加得到的是:1 0000 0010
最高位是1表示负数  补码是符号位不变,其余的变反加1,得到:-1111 1110  ,也就是-126

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
byte 类型值为-128到127   java byte定义变量后,当该变量值超过127后,会变成负数,127是最大正数,再加1,就超过,变成了-128,最小的负数,称补码溢出,这是补码的特性。你的就相当于是127+1+2=-128+2=-126

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马