import java.util.Scanner;
public class ShortToByte{
public static void main (String args[]){
int i=0;
while (i<6){
Scanner sinput = new Scanner (System.in);
short a = sinput.nextShort();
byte b = (byte) a;
System.out.println("Short value : " + a + ",Byte value : " + b);
i++;
}
}
}
我正在尝试理解不同数据类型之间的转换,但我很困惑,因为字节中128 = -128的短值如何,以及1000中的短= = 24字节?
我一直使用以下逻辑将short转换为byte:
1000十进制 - &gt;二进制= 0000 0011 1110 1000
转换为字节时的:xxxx xxxx 1110 1000,相当于:232
我注意到正确的答案是二进制值的两个补码,但是我们何时使用二进制补码进行转换,何时不是将3450从短转换为字节时我做了不使用两个补充,但达到了预期的效果。
谢谢!
答案 0 :(得分:3)
您从short
到byte
的演员表是缩小基元转换。 JLS, Section 5.1.3,声明:
将有符号整数缩小转换为整数类型
T
只会丢弃除 n 最低位之外的所有位,其中 n 是位数用于表示类型T
。除了可能丢失有关数值大小的信息之外,这可能会导致结果值的符号与输入值的符号不同。
(大胆强调我的)
数字类型用Java签名。短128
,以位为单位表示为
00000000 10000000
缩小为8位如下:
10000000
...这是-128
。现在1
位不再被解释为+128;现在它是-128,因为两个补码是如何工作的。如果设置了第一位,则该值为负。
与1000相似的东西。短1000
,用位表示为
00000011 11101000
缩小为8位如下:
11101000
...这是-24
。
答案 1 :(得分:0)