public class Test1 {
public static void main(String[] args) {
byte b1=40;
byte b=(byte) 128;
System.out.println(b1);
System.out.println(b);
}
}
输出
40
-128
第一个输出是40我理解但是第二个输出-128怎么可能?是否有可能因为它超出了它的范围?如果是,它在字节转换后如何工作...帮帮我
答案 0 :(得分:11)
当您将128(10000000
二进制)转换为8位byte
类型时,符号位将设置为1
,因此该数字将被解释为负数。 Java使用Two's Complement representation,因此10000000
是-128
- 可以用8位表示的最小负数。
根据这种解释,129
变为-127
,130
变为-126
,依此类推,一直到255
(11111111
在二进制中),变为-1
。
答案 1 :(得分:1)
Java中的一个字节以8位二进制补码格式表示。如果你有一个在128 - 255
范围内的int并将它转换为byte
,那么它将成为一个负值(在-1和-128之间)的字节。
话虽如此,你应该避免使用字节,因为它们存在问题。您会注意到是否将结果转换为byte,因为运算符实际返回int。你应该坚持使用java中的int和long,因为它们的实现更好。