int a = 130; byte b = a;
可见代码编译不通过
可见强转可以编译通过但输出为-126
怎么算的呢?
在Java中,byte 的取值范围是从 -128 到 127。当一个大于127的整数转换为 byte 类型时,会发生溢出。
具体来说,如果有一个整数 int130 等于 130,而你将其转换为 byte,则会发生溢出。在溢出的情况下,byte 的范围是 -128 到 127,所以实际结果是 130 - 256 = -126。
这是因为 byte 使用的是补码表示法,超过上限的值将从下限开始重新计数。在这种情况下,130 超出了 byte 的表示范围,所以会发生溢出,得到的结果是 -126。
那int=-130 呢?
如果有一个整数 int 的值为 -130,而你将其转换为 byte 类型,同样会发生溢出。
在Java中,byte 类型的范围是从 -128 到 127。当一个小于 -128 的整数转换为 byte 类型时,同样会发生溢出。在溢出的情况下,byte 的范围是 -128 到 127,所以实际结果是 -130 + 256 = 126。
这是因为 byte 使用的是补码表示法,小于下限的值将从上限开始重新计数。在这种情况下,-130 超出了 byte 的表示范围,所以会发生溢出,得到的结果是 126。