黑马程序员技术交流社区
标题: byte超出取值范围后结果是负数的原因 [打印本页]
作者: liangwaqi 时间: 2017-9-24 14:50
标题: byte超出取值范围后结果是负数的原因
本帖最后由 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
然而
说了这么一大堆有的哥们可能还是会
图样图森破,画个图解释一下?
那么补码与原码之间是如何转换的呢?
再画个图来解释一下
小伙伴们,明白了吗?
-
图片6.png
(31.64 KB, 下载次数: 31)
-
图片7.png
(32.81 KB, 下载次数: 21)
-
图片1.png
(37.17 KB, 下载次数: 16)
-
图片2.png
(61.16 KB, 下载次数: 25)
-
图片3.png
(18.94 KB, 下载次数: 38)
作者: wheat 时间: 2017-9-24 14:55
不错哦
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |