java中的強制型別轉換 int轉為byte
阿新 • • 發佈:2019-01-06
Java中的基本型別
java中所有的基本數值型別都有正負號,所以不要去尋找無符號的數值型別。
基本型別 | 大小 | 最小值 | 最大值 | 包裝器型別 |
---|---|---|---|---|
boolean | - | - | - | - |
char | 16-bit | Character | ||
byte | 8 bits | -128 | 127 | Byte |
short | 16 bits | -2^15 | 2^15-1 | Short |
int | 32 bits | -2^31 | 2^31-1 | Integer |
long | 64 Bits | -2^63 | 2^63-1 | Long |
float | 32 bits | IEEE754 | IEEE754 | Float |
double | 64 bits | IEEE754 | IEEE754 | Double |
void | - | - | - | Void |
高精度數字:
- BigInteger 支援任意精度的整數
- BigDecimal 支援任何精度的浮點數
java中的基本型別的強制轉換都是非常粗暴的,對於浮點型轉為整型,都進行非常粗暴的截尾,對於多位數轉換為少位數,也只是截斷,根本不做舍入和約算。所以就有了下面的結果。
基本型別的強制轉換典型筆試面試題
package primitiveType;
public class ByteTrancute {
public static void main(String[] args) {
// TODO Auto-generated method stub
byte a=(byte)127;
byte b=(byte)128;
byte c=(byte)100;
int x=0xff;//255
byte d=(byte)x;
x=0x80;//128
byte f=(byte )x;
c=(byte)(c*3);
System.out.println(a+" "+b+" "+c+" "+d+" "+f );
}
}
輸出:
127 -128 44 -1 -128
分析
複習二進位制的知識
原碼
對於二進位制數,最高位為符號位,0表示正數,1表示負數,剩餘數值部分是真值。
反碼
對於二進位制數,正數的反碼就是它本身,負數的反碼除符號位外按位取反。
補碼
對於二進位制數,正數的補碼就是它本身,負數的補碼符號位取一,數值部分按位取反後末位加一。
由補碼求真值,就是由補碼求原碼
正數:補碼即原碼
負數:按位取反,末位加一。相當於再求一次補碼。
如:
1000 0000 計算得 1 0000 0000 視為-128
1111 1111 計算得 1000 0001 即系-1
0111 1111 就是正值 127
所以,以上的程式碼中的型別強制轉換結果為:
int | 32bits二進位制 | 截成8bits後 | byte |
---|---|---|---|
127 | 0111 1111 | 0111 1111 | 127 |
128 | 1000 0000 | 1000 0000 | -128 |
255 | 1111 1111 | 1111 1111 | -1 |
127 | 0111 1111 | 0111 1111 | 127 |
300 | 01 0010 1100 | 0010 1100 | 44 |