当我分配大于字节的值时会发生什么?
根据官方的oracle文档,Byte是
字节:字节数据类型是8位带符号的二进制补码整数。最小值为-128,最大值为127(含)。字节数据类型对于在大数组中节省内存非常有用,因为内存节省实际上很重要。它们也可以用来代替int,因为它们的限制有助于澄清您的代码;变量范围有限的事实可以作为文档的一种形式
我的代码是
public class B
{
public static void main(String args[])
{
byte b;
b=(byte)129;
System.out.println("b="+b);
}
}
输出:
b=-127
当我分配大于字节的值时会发生什么。Java编译器将报告错误。如果我将此值转换为字节,我会去的
byte b = (byte) 128;
我不明白该程序的输出?
对于字节类型,只有8位存储值。您只能有256个不同的值(2 ^ 8 = 256)。Java表示负值,最高位为“ 1”:
-128 (dec) => 10000000 (bit)
-127 (dec) => 10000001 (bit)
...
-1 (dec) => 11111111 (bit)
0 (dec) => 00000000 (bit)
+1 (dec) => 00000001 (bit)
+127 (dec) => 01111111 (bin)
当您尝试设置一个值需要存储一个以上的字节时,就会发生将最低字节设置为一个字节值的情况:
+129 (dec) => 00000000 00000000 00000000 10000001 (int representation)
but 10000001 (bit) is -127 (dec) in byte representation of java type (as described above)
为了更好地理解Java中的溢出问题,请参阅以下文章:https : //medium.com/@jeanvillete/java-numeric-overflow-underflow-d6b206f96d88
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句