基本数据类型

基本数据类型


前言

基本数据类型共8类,byte、short、int、long、float、double、char、boolean。


1.类型

整数型:byte、short、int、long
浮点型:float、double
字符型:char
布尔型:boolean

2.存储空间、表数范围、精度

byteshortintlongfloatdoublecharboolean
存储空间1248482
表数范围-128~127-215 ~ 215-1-231 ~ 231-1-263 ~ 263-1-3.403E38 ~ 3.403E38-1.798E308 ~ 1.798E308true/false
精度714

注意,虽然long的长度大于float的长度,但long的表数范围并没有float的表数范围大,是因为float采用的科学计数法来存储数据的。

3.整数型

包含4种,byte、short、int、long。

  • java的整型常量默认为int型
  • java程序中变量通常声明为int型,除非不足以表示较大的数,才使用long
  • 声明long型常量,后面须加“l”或“L”

4.浮点型

包含2种,float、double。float,单精度,尾数可以精确到7位有效数字。很多情况下,精度很难满足需求。double,双精度,精度是float的两倍。通常采用此类型。

  • Java 的浮点型常量默认为double型 型,明 声明float 型常量,须后加‘f’ 或‘F’ 。

浮点型通常有两种表现形式:
1.十进制数形式:如:5.12 512.0f .512 (必须有小数点)
2.科学计数法形式:如:5.12e2 512E2 100E-2

4.1.浮点型float底层存储原理

4.1.1.十进制转二进制

整数部分直接转成二进制。小数部分一直乘以2,小于1则用结果继续乘,大于1则结果减1继续乘,等于1则结束,小于1即为0,大于1即为1。

4.1.2.float类型位图介绍

位图介绍

  • sign,用1位来表示浮点数正负,0表示正数;1表示负数。
  • exponent,用8位表示二进制的科学计数法中的指数部分的值,8位表示的数据范围可以是0 ~ 255,但是由于指数部分可能为负数,所以这个指数的范围为-128 ~ 127。再计算时让【指数+127】得到值转换为二进制存储在此即可。

注:0.5375的二进制小数位0.10001,科学计数法为 1.0001 * 2^-1。

  • fraction,用32为来表示二进制小数的科学计数法中的小数部分(不管整数部分,因为科学计数法中的整数总是为 1)。

4.1.3.39.29 转换为二进制过程

// 整数部分 39
100111

// 小数部分 0.29
0.29 * 2 = 0.58; // 0 小于1,则继续乘
0.58 * 2 = 1.16; // 1 大于1,则减1继续乘
0.16 * 2 = 0.32; // 0 小于1,则继续乘
0.32 * 2 = 0.64; // 0 小于1,则继续乘
0.64 * 2 = 1.28; // 1 大于1,则减1继续乘
0.28 * 2 = 0.56; // 0 小于1,则继续乘
0.56 * 2 = 1.12; // 1 大于1,则减1继续乘
0.12 * 2 = 0.24; // 0 小于1,则继续乘
0.24 * 2 = 0.48; // 0 小于1,则继续乘
0.48 * 2 = 0.96; // 0 小于1,则继续乘
0.96 * 2 = 1.92; // 1 大于1,则减1继续乘
0.92 * 2 = 1.84; // 1 大于1,则减1继续乘
0.84 * 2 = 1.68; // 1 大于1,则减1继续乘
0.68 * 2 = 1.36; // 1 大于1,则减1继续乘
0.36 * 2 = 0.72; // 0 小于1,则继续乘
0.72 * 2 = 1.44; // 1 大于1,则减1继续乘
0.44 * 2 = 0.88; // 0 小于1,则继续乘
0.88 * 2 = 1.76; // 1 大于1,则减1继续乘
0.76 * 2 = 1.52; // 1 大于1,则减1继续乘
0.52 * 2 = 1.04; // 1 大于1,则减1继续乘
0.04 * 2 = 0.08; // 0 小于1,则继续乘
0.08 * 2 = 0.16; // 0 小于1,则继续乘
0.16 * 2 = 0.32; // 0 小于1,则继续乘(与第三行相同,这样会一直循环执行下去)
。。。
将相乘之后的结果的整数部分拼接起来,所以0.29 的二进制表示:01001010001111010111000...

  • 结果:10111.01001010001111010111000…
  • 科学计数法:1.011101001010001111010111000… * 25
  • sign = 0,浮点数为正数。
  • exponent = 01000010,指数 5 + 127 = 132,将132转换为二进制。
  • fraction = 00111010010100011110101,最多保留23为二进制小数位,其他省略(不精确)。
  • 所以,最终39.25在存储时的二进制为:0 01000010 00111010010100011110101

5.字符型

只有一种,char。用来表示通常意义上“字符”(2字节)。

  • Java中的所有字符都使用Unicode编码,故一个字符可以存储一个字母,一个汉字,或其他书面语的一个字符。
  • char类型是可以进行运算的。因为它都对应有Unicode码。例如:
// 字符'a'的Unicode码值为97
char c = 'a';
int i = c + 1;
System.out.println("i=" + i);
>>> i=98

字符型变量的三种表现形式:
1.字符常量是用单引号(‘ ’)括起来的单个字符。例如:char c1 = ‘a’; char c2= ‘中’; char c3 = ‘9’;
2.Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。例如:char c3 = ‘\n’; // '\n’表示换行符。
3.直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表一个十六进制整数。如:\u000a 表示 \n。

6.布尔型

boolean 类型用来判断逻辑条件,一般用于程序流程控制。boolean类型数据只允许取值true和false,无null。

  • 不可以使用0或非 0 的整数替代false和true,这点和C语言不同。
  • Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达所操作的boolean值,在编译之后都使用java虚拟机中的int数据类型来代替:true用1表示,false用0表示。(取自《java虚拟机规范 8版》)

7.基本类型转换

基本数据类型之间的转换规则。

7.1.自动类型转换

容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:
自动类型转换规则

  • 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
  • byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
  • boolean类型不能与其它数据类型运算。
  • 当把任何基本数据类型的值和字符串(String)进行连接运算时(+),基本数据类型的值将自动转化为字符串(String)类型。

7.2.强制类型转换

自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符:(),但可能造成精度降低或溢出,格外要注意。

  • 通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。如: String a = “43”; int i = Integer.parseInt(a);
  • boolean类型不可以转换为其它的数据类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值