byte类型解析
因为byte类型在开发中使用得比较少,很多人都对其一知半解,我一开始也是,但是研究一下以后,对许多问题都能豁然开朗了。
运算报错问题
byte类型参数
运算,无论是否超范围,都会报错:
byte类型常数
运算,超范围,会报错,不超范围,不会报错:
这是因为:
两个变量
相加,先对类型进行提升,然后运算,再将运算结果赋值。
两个常量
相加,先计算常量数值,然后判断是否满足类型范围,再赋值。
范围超出问题
byte类型,范围是-128~127
,但是如果相加结果超出范围,那显示的是什么结果?
这里,b1+b2
最后的结果应该是130,超出了byte的范围。由上面一部分,我们知道,byte类型在进行运算的时候,是升范围进行运算的,计算结果是 4字节的int
类型130
。
130
用2进制表示,为00000000 00000000 00000000 10000010
,强制类型转化,会取最后8位,即10000010
,因为符号位是负数,将其由补码转换为原码,需要对其取反再加一:(补码)10000010
->(反码)11111101
->(源码)11111110
,其结果,就是-126
我们再来举几个例子,巩固一下:
首先是128
:
(int)00000000 00000000 00000000 10000000
->(强转)10000000
符号位为1,其余位为0,这种情况,结果是-128
然后是129
:
(int)00000000 00000000 00000000 10000001
->(强转)10000001
->(取反)11111110
->(加一)11111111