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呢 新手不懂
展开
2个回答
展开全部
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了
第一位表示符号;1为-;0为+;当为负数时,为了保证增减性一致;后七为要取反之后要加1;
为什么加1是因为会出现两个零;11111111 》》10000001=-1;00000000=0(不加1就麻烦了)
所以156 》》10011100 ;(byte)后就变为11100011》》-100; (1100011=99)
任何有符号的数据类型第一位都是表示正负;正数就不处理;负数就从第二位开始取反加1;
这也为什么byte是从-128~127了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询