Java中的基本数据类型
Java中的基本数据类型包括:
- 整数类型
byte 字节
short 短整型
int 整型
long 长整型 - 浮点数类型
float 单精度浮点数
double 双精度浮点数 - 字符类型
char 字符 - 布尔类型
数据的在计算机中的存储方式
计算机中存储各个类型的数据的空间大小都不一样,字节类型的数据就在内存中占了1个字节的空间。而相对的 short 占了2个字节,int为4个字节,long为8个字节,float占了4个字节,double占了8个字节,char占了2个字节,布尔类型占了一个字节。
计算机能识别的只有二进制文件,最小的单位为bit,一个字节等于8个比特,也就是说一个byte类型的数据在计算机的内存中要占8个比特位,每个比特位上存储的值只有0或1。如:byte类型的整数127在计算机中存储的二进制数就是01111111,每一个位数对应的就是一个比特位。由此可以推断别的数的类型的二进制存储的实际数据。
原码、反码、补码
每一个二进制数据都对应了一个十进制数据,数据的第一个比特位为最高符号位,最高符号位后面的比特位为数值位,用来存储真正的数值。
正数它的原码、反码、补码都相同,它的符号位为0;而负数的最高符号位为1,它的反码是将数值位的0全部换成1,1全部换成0,从而得到它的反码,补码为反码+1;
就像下面的例子:
已知某数X的原码为0b11011010,试求X的补码和反码。
负数
最高符号位 数值位
1 1011010
负数的反码:最高符号位不变,数值位按位取反,1变0,0变1
1 0100101
负数的补码:在反码的基础上,末尾+1
1 0100101
+ 1
----------------------------------
1 0100110
已知某数X的补码0b11110111,试求其原码。
补码
最高符号位 数值位
1 1110111
反码:在补码的末尾-1
1 1110111
- 1
---------------------------------------
1 1110110
原码
1 0001001
原码:0b10001001
这就是负数反码补码的计算方式,计算机中存储的是数据的补码。
基本数据类型的转换
当数据从低类型向高类型转换时被称之为默认类型提升,也称之为隐式转换,如:
class Test{
public static void main(String[] args){
byte b=127;
int i=b;
}
}
编译通过说明b的类型被自动提升到int类型才能赋值成功。
同样的byte类型也能隐式转换为short类型,long类型,向上转型时可以成功的。
强制转换
强制转换就是将无法隐式转换的类型强行降级。
格式: 目标类型 变量名=(目标类型) 变量值;
如:
int i=520;
byte b=(byte)i;
这种强制类型转换可能会导致数据精度的丢失。
它的实现方法就是将相对来说类型基本高的所占的的比特位进行截取,留下目标类型所占比特位数;
如:将int类型的130转换为byte类型
int 类型的130在计算机中所存储的二进制补码
00000000 00000000 00000000 10000010
因为byte类型所占的字节数是1,所以要将前面三个字节截掉,只留下最后一个字节,即转换的byte类型的数的补码为:
10000010
转换为原码则是-126(十进制 感觉上和130差的太多)
所以说强制转换会导致数据出现精度丢失。