英文:
Can anyone explain the output of variable byte in this case, it is occuring in negative
问题
我知道它超出了字节的范围
public class TypeMismatchVariable {
byte b = (byte) 129;
public static void main(String[] args) {
TypeMismatchVariable t1 = new TypeMismatchVariable();
System.out.println(t1.b);
}
}
在这种情况下,我的输出是-127
但我没有任何原因来解释它。
英文:
I know it is out of range for byte
public class TypeMismatchVariable {
byte b = (byte) 129;
public static void main(String[] args) {
TypeMismatchVariable t1 = new TypeMismatchVariable();
System.out.println(t1.b);
}
}
In this case I'm having -127 as my output
But I don't have any reason for it
答案1
得分: 0
Byte范围从最小值-128到最大值127(包括在内)。
有关byte类型,您只有8个位来存储该值。您只能有256个不同的值(2^8 = 256)。Java使用'1'作为最高位来表示负值:
-128(十进制) => 10000000(位)
-127(十进制) => 10000001(位)
...
-1 (十进制) => 11111111(位)
0 (十进制) => 00000000(位)
+1 (十进制) => 00000001(位)
+127 (十进制) => 01111111(位)
当您尝试设置一个需要多个字节来存储的值时,将最低字节设置为一个字节值:
+129(十进制) => 00000000 00000000 00000000 10000001 (int表示方式)
但是10000001(位)在Java类型的字节表示中为-127(十进制),如上所述。
要更好地理解Java中的溢出问题,请参阅文章:https://medium.com/@jeanvillete/java-numeric-overflow-underflow-d6b206f96d88
英文:
Byte range is from minimum value of -128 and a maximum value of 127 (inclusive).
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html.
For byte type, you only have 8 bits to store the value. You can have only 256 distinct values (2^8 = 256). Java represents negative values with '1' as the highest bit:
-128 (dec) => 10000000 (bit)
-127 (dec) => 10000001 (bit)
...
-1 (dec) => 11111111 (bit)
0 (dec) => 00000000 (bit)
+1 (dec) => 00000001 (bit)
+127 (dec) => 01111111 (bin)
When you try to set a value that needs more than one byte to store then setting the lowest byte to a byte value happens:
+129 (dec) => 00000000 00000000 00000000 10000001 (int representation)
but 10000001 (bit) is -127 (dec) in byte representation of java type (as described above)
To have a better understanding of the overflow problem in Java, see the article: https://medium.com/@jeanvillete/java-numeric-overflow-underflow-d6b206f96d88
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论