1. byte n=10+127;
1)分析:
a. 10和127属于字面量,经过javac优化后 byte n=127;
b.n 的类型是byte,127的类型默认为int,造成数据类型不匹配,那么javac会判断127是否位于byte类型的取值范围之内;若为范围之内将127的类型转换byte,否则报错。
2)原理:
1))127在内存中以32位进行存储,那么赋值号右边的数据类型为整形,与赋值号左边的类型不匹配,需要类型转换。
2))校验127是否位于byte的取值范围之内,如果位于,就将第32位的符号记录在第8位,其他位的截掉;若超过范围,就提示错误。
2.案例2
byte i=10;
byte j=117;
byte m=i+j;//报错
解析:
等值号右边不是常量,而是变量,无法确定其值是否位于bye的取值范围,所以报错。
1.关于char类型的笔记
java支持Unicode编码,两个字节存储文字,前255仍然存储ASCII所表示的文字信息。
2.关于float与Double的笔记
1)float
1))folate 4字节,1位符号位,8位指数位,23位用来记录数字。
2))int与folate相比,int的精度高,float的范围大。
(int 使用32位存储数字而float为23位,所以int精度高;folate使用8位指数,所以folate的范围大)
3))因为folate精度尚且不如int类型,所以一般计算不采用float。
2)Double
Double内存的存储结构:1位的符号位,11位的指数位,52位的数字位。
3.简单数据类型与进制之间的类型转换
1)例:
Integer.toBinaryString(int i);//二进制
toHexString(int);//十六进制
toOctalString(int);//8进制
2)数据的存储方式:
在计算机中都是以补码的形式存储数字
正数:原码与补码都一样。
负数:补码在反码的基础上+1.
4.关于byte的简单笔试题
1)byte的强转换的案例
1))代码
byte b=(byte)140;
System.out.println(b);//b=-116
2))代码的分析如下“
补码:11111111 11111111 10001100
反码:11111111 11111111 10001011
原码:10000000 00000000 01110100
原理与案例一类似。