基础数据类型 java中的8种基本数据类型
java里面只有两种数据类型: 基本数据类型 引用数据类型
为什么要分数据类型:
1. 方便运算
2. 方便存储 节省内存
取值范围 反应 存储的时候内存的大小
内存的单位:
1T = 1024G
1G = 1024MB
1MB = 1024KB
1KB = 1024B
B 字节单位
1B = 8个二进制位 二进制的数有8位
**数值类型**
**整型类型**
byte [-128,127] [-2^7,(2^7)-1]; 8个二进制位
short [-2^15,(2^15)-1] [-32768,32767] 16个二进制位 2字节
int [-2^31,(2^31)-1] [-2147483648,2147483647] 4字节
long [-2^63,(2^63)-1] 8字节
**注意**:
浮点类型都是不精确的数值
**浮点类型**(小数) 存储方式和整数类型不一样 用指数记数法
float 单精度浮点类型 取值范围 +-3.4*10^38 次方
4字节 32个二进制位 表示最大的精度范围 6-7位
最高位是符号位
1个符号位,8个指数位,23个小数位
任何一个小数都能够表示成为:
1.1010101101 *10 ^n
二进制*10^n
0.5 二进制 0.1 1*(2)^-1
0.25 二进制 0.01
0.125 0.001
3.125 011.001 --> 1.1001 * 10^1
1.111111111111111111111111 ~ 2
1/2+1/4+1/8
double 双精度浮点类型
8字节 64个二进制
1个符号位 11个指数位,52个小数位 +-1.79*10^308
表示最大的精度范围 15-16位
对于一个float类型的数据 是否等于0
float f = 0;
(-0.0000001,0.0000001) 区间范围都表示0
**注意**:
1.在java中,直接给出的整数直接值默认是int类型,如果需要表示超出int表示范围的整数时,需要加L/l
2.在java中,直接给出的浮点类型数值为double类型
如果想要表示一个直接值是float类型,那和需要在该浮点值之后加f/F
**字符类型**
char 一个字母 或者一个汉字
用单引号引起来的
2个字节 本质上是一个无符号的整数类型 [0,65535] [0,2^16-1]
16个进制 1111 1111 1111 1111 == 0xffff
char c = '中'
char c1 = 20013;
char c2 = '\u4e2d'
都表示'中'
底层中都是 100111000101101 这样一串二进制
**布尔类型**
boolean 1个字节 8个二进制位
boolean类型只有两个取值 true false
**数据类型转换**:
**隐式类型转换**:
byte char short int 给一个取值范围之内数值是可以直接赋值的
byte->short->int->long->float->double 反之则不行
char->int
但是不能将一个int变量的值赋值给byte、char、short,即使是在该变量的取值范围之内也不行
**强制类型转换**:
不能进行隐式转换时可以进行强制类型转换
目标类型 变量 = (目标类型)变量;
double d = 3.1415926734;
float f = (float)d;//强制类型转换
强制类型转换可能造成
1.精度缺失
2.数据溢出
提前预测数据类型,避免没必要的类型转换
计算机中保存数据是以补码的形式存储
二进制分为原码、反码、补码
原码: 整数转换成二进制 最高位为符号位 0正1负 其它位为数值位
反码: 针对负数而言 符号位不变 其它位按位取反 满足正数加负数
补码: 针对负数而言 负数的补码=其原码符号位(始终不变)不变,其它位按位取反加1
正数的原码、反码、补码都是自己本身