① java中整数类型转换
在Java中,类型转换分为两种:一是隐式类型转换,二是强制类型转换。
隐式类型转换是低精度数据向高精度数据转换,系统自动执行,不需要编程人员手动实现。
强制类型转换是高精度数据向低精度数据转换,需要编程人员手动实现转换。
精度由低到高的顺序为byte<short<int <long<float<double
所以在楼主的第一个问题中答案是byte short 转为int是都不需要强制转换的。
楼主的追问中提到的问题涉及到了Java的默认类型,在Java中整数型默认为int,
所以无论楼主定义的a b是byte还是short, 其a+b的结果都是默认为int的。而楼主是用byte或short型变量接收a+b的运算结果。又因为int的精度高于byte和short, 所以他们都需要进行强制转换,否则编译是会报错的。
//byte运算
bytea=1;
byteb=2;
bytex=(byte)(a+b);
System.out.println(x);
//short运算
shortw=1;
shorts=2;
shortz=(short)(w+s);
System.out.println(z);
注意:在这个的强制类型转换中,因为涉及到了运算中类型提升问题,所以应当将a+b或w+s 整体用括号扩住,否则编译器仍会报错。
② java 变量数据类型转换byte, short, char, int, long, float, double
byte b1 = 3; byte b2 = 4; byte b = b1-b2这个之所以报错,是因为在进行b1-b2的运算时,会自动将b1和b2提升成int型,所以最后结果也是int型,需要进行强制装换,才能赋值给byte型变量
默认排序你似乎有点搞错,应该是byte,char,short,int,long,float,double
③ Java中如何将两个无符号的byte转换为一个有符号的short
这个是可以进行转换和复原的,举例:
short x = -32752;//定义一个short
byte high = (byte) (0x00FF & (x>>8));//定义第一个byte
byte low = (byte) (0x00FF & x);//定义第二个byte
System.out.println(high);//打印第一个byte值
System.out.println(low);//打印第二个byte值
// 复原
short z = (short)(((high & 0x00FF) << 8) | (0x00FF & low));
System.out.println(z);//输出的结果就是-32752
④ java short 数组转换 byte
short[] s = {0, 1, 0, 1, 0, 1, 0, 0};
String str = "";
for(int i = 0; i < s.length; i++){//把数组转成一个字符串01010100
str += s[i];
}
byte b = Byte.parseByte(str, 2);//二进制字符串转成byte
b就是你想要的byte, 值为十进制84, 16进制0x54
当然也可以用位移运算
short[] s = {0, 1, 0, 1, 0, 1, 0, 0};
byte p = 0;
for(int i = 0; i < s.length; i++){
p += s[i]<<(s.length - 1 - i);
}
System.out.println(p);
⑤ java short 数组转换 byte数组
可以通过循环再加强制转换来进行转换,如下
short[]one={1,2,3};
byte[]two=newbyte[one.length];
for(inti=0;i<two.length;i++){
two[i]=(byte)one[i];
}
for(byteb:two){
System.out.println(b);
}