+ 是一个运算符,做加法运算的
一般来说,运算时要求参与运算的数据类型必须一致
数据类型转换
- boolean 类型不能转换为其他的数据类型
- 默认转换
- 强制转换
byte 与 int 的运算
- byte a = 3;
- int b = 4;
首先计算出数据对应的二进制
3 --- 11
4 --- 100
byte 占一个字节,那么 byte 类型的 a 为:
00000011
int 占四个字节,那么 int 类型的 b 为:
00000000 --- 00000000 --- 00000000 --- 00000100
a 与 b 进行加法时,byte 会自动转换为 int 类型,即:
00000000 --- 00000000 --- 00000000 --- 00000011
然后 a + b ,结果为:
00000000 --- 00000000 --- 00000000 --- 00000111
所以,最终的结果就是 int 类型的 7
数据类型的默认转换
- byte short char 默认转换为 int 类型
- byte short char 相互之间不转换,他们参与运算首先转换为 int 类型
- 字节不同的数据类型参与运算,结果为最大字节的数据类型
运算中有 long 类型,结果必是 long 类型
运算中有 float 类型,结果必是 float 类型
运算中有 double 类型,结果必是 double 类型
byte --- chort --- char ----> int ---> long --- float --- double
强制转换数据类型
从大的数据类型到小的数据类型
- 目标类型 变量名 = (目标类型)(被转换的数据);
byte c = (byte)( a + b );
注意:强制类型转换有可能会损失精度
思想题
float f1 = (float) 12.345;
float f2 = 12.345F;
f1 f2 的区别
- f1 是通过一个 double类型转换过来的,有可能会损失精度
- f2 本身就是一个float类型
小知识
- 在定义 Long Float 类型变量的时候,要加上 L 或 F
- 整数默认是 int 类型,浮点数默认是 double
- byte short 在定义的时候,他们招收的其实是一个 int 类型的值,然后再进行数据检测,判断如果不在他的范围内,就报错
byte b = (byte) 130 值是多少
获取 130 的二进制值
10000010
130 属于整数 int 是四个字节
00000000 --- 000000000 --- 00000000 --- 10000010
这是 130 的原码 反码 补码
进行截取操作,得到的结果是补码
10000010
已经补码,获取原码结果
补码: 1 --- 0000010
反码: 1 --- 0000001
原码: 1 --- 1111110
再把二进制转换为十进制,其结果为:
- 126 (负 126)
byte 的范围 -128 ~ 127
byte b1 = 127; //127
byte b2 = (byte)128; //-128
byte b3 = (byte)129; //-127
byte b4 = (byte)130; //-126
b1 127正好在 byte 的范围内,所以不用截取,128超出了范围,要截取,相当于是 -128 ~ 127 是一个环形,只要超出范围,截取的时候再绕一圈
- 128 : 10000000
- 这里的 1 即是符号位,也是数值位