1. 程式人生 > >java中的強制型別轉換 int轉為byte

java中的強制型別轉換 int轉為byte

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