① 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);
}