java中,byte a=67; byte b=89: byte c=(byte)(a+b); 这个语句中,输出c的结果是-100 是怎么算出

67+89=156转换为二进制位10011100而int最大值位127转换为二进制为11111111相减为-01100011转换为十进制位-99为什么是-100呢新手不懂... 67+89=156 转换为二进制位10011100 而int最大值位127转换为二进制为11111111 相减为-01100011 转换为十进制位 -99 为什么 是-100呢 新手不懂 展开
 我来答
552023943zjx
2013-08-26 · TA获得超过1040个赞
知道小有建树答主
回答量:260
采纳率:0%
帮助的人:339万
展开全部
67+89二进制为10011100.首位为1是负数。负数是用补码表示,变成原码要首位不变,取反加一:取反:11100011;加1:11100100. 也就是-100了
追问
你的意思是说,第一个1是个“-”号  然后后面七位0011100取反加一,变成1100100,换算成十进制为100,所以就是-100了呗,是不是这么理解的。。。。。。原理不懂但是算是会算了。。
追答
首位是表示正负。你可以看看原码和补码之间的相互转换
嫉恶如仇尼玛
2013-08-26 · TA获得超过141个赞
知道答主
回答量:234
采纳率:100%
帮助的人:171万
展开全部
byte只有一个字节即8位;但它又是有符号的;11111111严格来讲是-1;
第一位表示符号;1为-;0为+;当为负数时,为了保证增减性一致;后七为要取反之后要加1;
为什么加1是因为会出现两个零;11111111 》》10000001=-1;00000000=0(不加1就麻烦了)
所以156 》》10011100 ;(byte)后就变为11100011》》-100; (1100011=99)

任何有符号的数据类型第一位都是表示正负;正数就不处理;负数就从第二位开始取反加1;
这也为什么byte是从-128~127了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式