基础类型范围:
byte b = 44; //byte占1个字节,取值范围为-128~127(-2的7次方~2的7次方-1)
char c = 'b'; //当转换为数字时,对应为字符的ASCII码表的十进制数
short s = 1024; //short占2个字节,-2的15次方~2的15次方-1(-32768~32767)
int i = 40000; //int占4个字节,-2的31次方~2的31次方-1(-2147483648~2147483647)
long l = 12463l; //long占8个字节,-2的63次方~2的63次方-1(-9223372036854774808~9223372036854774807)
float f = 35.67f; //float和double都属于浮点型,double的精度比float更精确
double d = 3.1234d;
//-133相反数的源码: 1000 0101
//反码 0111 1010
//+1 0111 1011
//123
//第一位为0,表示为正数
d = -133.89d; //不够取模,负数,执行结果:b1 = 123
//正数在计算机中表示为原码
// 原码: 1000 0000
// 第一位为1,表示负数
d = 128.89d; //不够取模,正数,执行结果:b1 = -128
d = -260.33d; //够取模(256),执行结果:b1 = -4
d = 126.44d; //不够取模,在[-128~127]范围内,执行结果:b1 = 126
byte b1 = (byte)d;
System.out.println("b1 = "+b1);
double类型向byte类型转换的规则如下:
1 //d截断小数部分,整数部分与byte的区间范围256取模: 2 // 1.1够取模则取模值 3 // 1.2不够取模: 4 // 1.2.1在[-128~127]则取对应的值 5 // 1.2.2不在[-128~127] 6 // 1.2.2.1为负数 7 //负数在计算机里面显示为补码形式,补码的转换为: 8 //1.获取负数对应正数的原码(8位二进制) 9 //2.把1的结果按位取反 10 //3.把2的结果加1 11 //4.3中的第一位为0则为正数,为1则为负数 12 // 1.2.2.2为正数 13 //正数在计算机中表示为原码 14 // 原码: 1000 0000 15 // 第一位为0则为正数,为1则为负数
//-33700相反数的源码: 1000 0011 1010 0100
//反码 0111 1100 0101 1011
//+1 0111 1100 0101 1100
//31836
//第一位为0,表示为正数
//short占2个字节,-2的15次方~2的15次方-1(-32768~32767),取模65536
d = -33700.66d; //执行结果:s1: 31836
short s1 = (short)d;
System.out.println("s1: "+s1);
float f = 35.67f;
double d1 = f; //目标类型范围比源类型围大,自动转换
float f1 = (float)d1; //目标类型范围比源类型围小,进行强制转换
基本类型进行运算时,范围小的类型会自动提升到范围大的类型