【Java之旅】3.Java中的基本类型及精度损失
3.1Java中的基本数据类型
a.整数类型
类型 | 大小 |
---|---|
byte | 8 bit (-128~127) |
short | 2 Byte (-32768 ~ 32767) |
int | 4 Byte [-2147483648(-231)~ 2147483647(231-1)] |
long | 8 Byte (-263~ 263-1) |
b.浮点数类型
类型 | 大小 |
---|---|
float | |
double |
c.字符类型
类型 | 大小 |
---|---|
char | 2 bit |
d.布尔类型
类型 | |
---|---|
boolean | true / false |
3.2 强制类型转换
在java中,定义整数型数据的时候,如果字面量是十进制的数值,那么java会自动默认为int型。
比如说 123,3557都是int型的整数
如若要表示float型浮点数必须得要在数字后面加上一个f或者F,如3.14159f
3.3 原码,反码,补码
第一位是符号位,第一位是1则表示负数,为0表示正数
比如说1Byte 有 8bit
我们来对比一下+1与-1的原码 反码 补码
+1:
原码: 0000 0001;
反码: 0000 0001;
补码: 1111 1111;
-1:
原码: 1000 0001;
反码: 1111 1110;
补码: 1111 1111;
由此我们可以知道 正数的原码、反码、补码都相同
负数的反码符号位不变,其他位取反,
负数的补码:反码+1
在计算机中,数字都是依靠着补码进行储存
3.4 精度损失
在3.1中写了关于几个基本类型的范围,
当我们将超出该类型范围的数赋给该类型的变量,就会导致精度损失,编译器报错。
比如说 long a = 2147483648;就是错误的,因为整形的字面量默认为int型 2147483648数值太大,超出了int型范围
所以要换成 long a = 2147483648L; 编译可通过
例1:
char c = 'a';
int cc = c;
编译可以通过
如果反过来
int c='a';
char cc=c;
那么编译会报错,c是int型的变量,占四个字节,而char型只有2个字节
所以从int转换到char就会精度损失。
在基础数据类型中,如果大转小,不强制类型转换,编译无法通过