一、java的8种数据类型
Java是一种强数据类型,其本质就是在内存中开辟不同形式的内存空间。
整型:byte,short,int,long
浮点型:float,double
布尔型:boolean
字符型:char
二、整型及浮点型的存储范围
类型 | 字节长度 | 取值范围 |
---|---|---|
int | 4 | -2147483648~2147483647 |
short | 2 | -32768~32767 |
long | 8 | -9223372036854775808~9223372036854775807 |
byte | 1 | -128~127 |
float | 4 | 略 |
double | 8 | 略 |
三、为什么byte类型127+1是-128
public static void main(String[]args){
byte a=127;
byte b=(byte)(a+1);
System.out.println(b);
}
1.计算机中以补码存储数据
(以byte类型进行讨论)
原码:
45 00101101
-45 10101101
反码:
45 00101101
-45 11010010
补码:
45 00101101
-45 11010011
针对正数:正数的原码=反码=补码
针对负数:负数的反码=除符号位外其余位按位取反;
负数的补码=反码+1
2.为什么要计算反码
因为在计算机中只有加法,没有减法,在进行减法运算时,实质上是认为加上一个负数,这样可以减少计算电路的复杂度。
使用原码进行减法运算会出错:
例如,计算1-1,在计算机中默认转换为1+(-1),
=【00000001】原+【10000001】原=【10000010】原=-2
结果与实际运算不符
使用反码进行减法运算:
=【00000001】原+【10000001】原=【00000001】反+【11111110】反=【11111111】反=【10000000】原
=-0
00000000可以表示+0,10000000可以表示-0,二者是一样的,用2个编码其实浪费了资源。
使用补码进行减法运算:
=【00000001】原+【10000001】原=【00000001】补+【11111111】补
=【00000000】补
=【00000000】原
这样0可以用【00000000】表示,而之前出现的-0问题也就不存在了。
反码是为了解决减法问题,而补码是为了解决反码产生的±0的问题
四、数据转换时的精度损失
从int型数据转换为float型存在精度丢失,
从int型数据转换为double型存在精度丢失,
从long型数据转换为float型存在精度丢失,
强制类型转换:括号中表明强制转换类型
例如:将int型数据转换为byte型数据
int a=56788;
byte b=(byte)a;
五、关系运算符
常见的关系运算符:
关系运算符 | 含义 |
---|---|
== | 相等运算符 |
>= | 大于或等于运算符 |
<= | 小于或等于运算符 |
!= | 不等于运算符 |
> | 大于运算符 |
< | 小于运算符 |