java中的强制类型转换 int转为byte

        • Java中的基本类型
        • 基本类型的强制转换典型笔试面试题
        • 分析

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

你可能感兴趣的:(java)