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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 liangwaqi 于 2017-9-24 15:59 编辑


在我们使用byte的过程中经常会出现byte超出取值范围结果为负数的情况,那么这种情况是如何产生的呢?
各位骚年是不是经常会遇到这种情况呢?


例如:

输出的结果竟然是 -128。而byte类型的取值范围是-128-127。
二者相加之后已经超出了byte的取值范围,这种结果是如何产生的呢?
客官莫要着急,听我慢慢道来。
这个输出结果是由java编码方式决定的,Java中正数用原码表示,负数用补码表示,第一位是符号位。
对于127他的编码是:
0000 0000 0000 0000 0000 0000 0111 1111
加上1也就是128,他的编码是:
0000 0000 0000 0000 0000 0000 1000 0000
使用强制转型后,a的编码就变成:
1000 0000
因为java第一位为1的为负数,负数用补码表示,所以要显示原码,要取反加1
这样就变成 0111 1111
这样就是128加上符号,结果就是-128
然而

说了这么一大堆有的哥们可能还是会

图样图森破,画个图解释一下?

那么补码与原码之间是如何转换的呢?
画个图来解释一下

小伙伴们,明白了吗?

更多图片 小图 大图
组图打开中,请稍候......
您需要登录后才可以回帖 登录 | 加入黑马