杂:
1 byte=8 bit
java 中进制的表示
二进制 0b开头
八进制 0开头
十进制
十六进制 0x开头
原码:二进制 最高位符号位 0正1负
反码:若为负数 符号位不变 其他位取反
补码:若为负数 反码加一
正数三码相同
八种基本数据类型
byte :一个字节 -128~127
short:两个字节 -2^15 ~2^15-1
int :四个字节 -2^31 ~2^31-1
long :八个字节 -2^63 ~2^63-1
float : 四个字节
double :八个字节
char :两个字节 0~65535
boolean: true和false 理论上八分之一个字节 实际上没有具体大小
long x=8888888888
整数默认为int型 而上面的数字超过int型范围 会报错
long x=8888888888L
float f =12.3
小数默认为double型 上面这种赋值可能损失精度
float f=12.3f
隐式转换
int x=3;
byte b=4;
x=x+b;
b先提升为int型
强制转换
int x=3;
byte b=4;
b=x+b;
报错精度损失 x+b为int型 赋值给byte型会损失精度
b=(byte)(x+b);
强制转换超出范围
byte b=126+4;
报错 损失精度 126+4>127 变为int型
byte b=(byte)(126+4); =-126
130的二进制补码
00000000 00000000 00000000 10000010
赋值给byte后补码
10000010
反码 10000001
原码 111111110 答案是-126
byte b=300;
byte b=(byte)(300);
System.out.println(b);
//b=44;
byte b1=3;
byte b2=4;
byte b3=b1+b2;
错误1.byte、short、char之间运算会提升为int 两个int之和为int
会损失精度
2.两个byte相加有可能超出byte范围
byte b=3+4 正确
等价于 byte b=7;
只要给byte型变量赋值-128到127 之内的数 就是byte型 不是int型
byte,char,short ->int->long->float->double
float比long大
float四个字节 32位
1符号位 8指数位 23尾数位 指数位0~255
0代表0 255代表无穷大
'a‘+1 98
char('a’+1 ) b
任何数据类型用加号和字符串连接都会产生新的字符串
“hello”+‘a’+1 helloa1
‘a’+1+“hello” 98hello
“5+5=”+5+5 5+5=55
“5+5=”+(5+5) 5+5=10
char a=97 结果为a
与 byte b=100同理 97在byte的取值范围内
char 可以存储中文
byte b=10;
b++ //等价于b=(byte)(b+1)
b=b+1 报错
short s=1;s=s+1 报错
s+=1 //等价于s=short(s+1);