一.【类型转换】
—>无精度损失
--à有精度损失
Byte 1字节 -2的7次方到2的7次方-1
short 2字节 -2的15次方到2的15次方-1
int 4字节 -2的31次方到2的31次方-1
long 8 字节 -2的63次方到2的63次方-1
float 4字节 3.402823e+38 ~ 1.401298e-45
double 8字节 1.797693e+308~ 4.9000000e-324
char 2字节
结论:一个字节占8位数,字节数越多则表示数的范围更大。
二.【代码运行】
无论是单精度,还是双精度在存储中都分为三个部分,符号位:0代表正,1代表负;指数位:存储二进制科学记数法的指数数据,并且采用移位存储;尾数部分:存储二进制科学记数法中小数点后数据。
Float:
Double
如8.25,用二进制科学记数法表示为:1.0001*2^3;
指数可正可负,而8位的指数范围是-127~128,所以采用移位存储,即元数据+127
由于存储方式的原因,在进行加减运算时会出现误差,即十进制转为二进制是可能会有数据丢弃,再转为十进制时,可能就不会出现原数据。
三.【代码运行】
int X=100;
int Y=200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"=X+Y");
运行结果:
x+y=300
300=x+y
1.先输出“x+y=”这个字符串str1然后运行“+”将x代表的值和str1组合成str2“x+y=100”,然后运行“+”,将y代表的值和str2组合成新的字符串str3“x+y=300”,然后输出。
2.由于x+y 不是字符串所以先计算出结果“300”将“300”作为字符串srt1,然后运行“+”和“=x+y”组合成新的字符串str2“300=x+y”,然后输出。
四.【原码,反码,补码】
- ·原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。
- ·反码的表示方法是:正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
- ·补码的表示方法是:正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1。 (即在反码的基础上+1)