本帖最后由 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 然而 说了这么一大堆有的哥们可能还是会 图样图森破,画个图解释一下? 那么补码与原码之间是如何转换的呢?
再画个图来解释一下 小伙伴们,明白了吗? |