为什么为什么下面代码的输出结果分别是
-130
126
-127
-127
-128
-128
请牛人详细解释一下如何截位处理 正负号又是怎么处理的 谢谢!
public class Test {
public static void main(String[] args) {
short a=-130;
byte b=(byte)a;
short c=-127;
byte d=(byte)c;
short e=-128;
byte f=(byte)e;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
System.out.println(f);
}
}
-130
126
-127
-127
-128
-128
请牛人详细解释一下如何截位处理 正负号又是怎么处理的 谢谢!
public class Test {
public static void main(String[] args) {
short a=-130;
byte b=(byte)a;
short c=-127;
byte d=(byte)c;
short e=-128;
byte f=(byte)e;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
System.out.println(f);
}
}
a 的类型为short,2个字节16位,-130对应的二进制值是1000000010000010,对应十进制就是-130
b 的类型为byte,1个字节8位,截取a的低8位取补码就是01111110,对应十进制就是126
c 的类型为short,2个字节16位,-127对应的二进制值是1000000001111111,对应十进制就是-127
d 的类型为byte,1个字节8位,截取a的低8位取补码就是11111111,对应十进制就是-127
e 的类型为short,2个字节16位,-128对应的二进制值是1000000010000000,对应十进制就是-128
f 的类型为byte,1个字节8位,截取a的低8位取补码就是10000000,对应十进制就是-128
a 的类型为short,2个字节16位,-130对应的二进制值是1000000010000010,对应十进制就是-130
b 的类型为byte,1个字节8位,截取a的低8位取补码就是01111110,对应十进制就是126
c 的类型为short,2个字节16位,-127对应的二进制值是1000000001111111,对应十进制就是-127
d 的类型为byte,1个字节8位,截取c的低8位取补码就是11111111,对应十进制就是-127
e 的类型为short,2个字节16位,-128对应的二进制值是1000000010000000,对应十进制就是-128
f 的类型为byte,1个字节8位,截取e的低8位取补码就是10000000,对应十进制就是-128
a 的类型为short,2个字节16位,-130对应的二进制值是1000000010000010,在计算机里存的是补码的形式0111111101111110,对应十进制就是-130
b 的类型为byte,1个字节8位,截取a的低8位取补码就是01111110,对应十进制就是126
c 的类型为short,2个字节16位,-127对应的二进制值是0111111110000001,对应十进制就是-127
d 的类型为byte,1个字节8位,截取c的低8位取补码就是11111111,对应十进制就是-127
e 的类型为short,2个字节16位,-128对应的二进制值是0111111110000000,对应十进制就是-128
f 的类型为byte,1个字节8位,截取e的低8位取补码就是10000000,对应十进制就是-128