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