数据类型

基本数据类型

1、数值型

(1)整数类型:byte、short、int、long

(2)浮点类型:float、double

2、字符型:char

3、布尔型:boolean

 

引用数据类型:如,class、interface、数组等

 

整数类型 占用存储空间 范围
byte(字节) 1 字节 -27 ~ 27-1
short(短整型) 2 字节 -215 ~ 215-1
int(整型) 4 字节 -231 ~ 231-1
long(长整型) 8 字节 -263 ~ 263-1

1、Java 整数类型有固定范围、字段长度,不受操作系统影响,保证可移植性

2、Java 整数常量类型默认为 int

3、声明为 long 需要在数值后加上“l”或“L”

4、1 byte = 8 bit

 

浮点类型 占用存储空间 范围
float(单精度) 4 字节:1 位(符号位)+11 位(指数位)+52 位(尾数位) [-3.4 * 1038, -1.18 * 10-38] ∪ [1.18 * 10-38, 3.4*1038]
double(双精度) 8 字节:1 位(符号位)+8 位(指数位)+23 位(尾数位) [-2.23 * 10-308, 1.80 * 10308] ∪ [1.80 * 10308, 2.23 * 10-308]

1、浮点数 = 符号位 + 指数位 + 基数位 + 尾数位

(1)实际的数据中往往不考虑基数(一般为 2),只用符号、尾数、指数这三部分即可表示浮点数,

(2)符号部分:使用一个数据位来表示数值的符号,该数据位是 1 时表示负,为 0 时则表示“正或 0”

(3)数值的大小用尾数部分和指数部分来表示。例如,小数就是用“尾数部分 * 2 的指数部分次幂”这样的形式来表示

(4)尾数部分:将小数点前面的值固定为 1 的正则表达式

(5)指数部分:EXCESS 系统表现

2、小数都是近似值,尾数部分可能丢失,造成精度损失

3、Java 浮点类型有固定范围、字段长度,不受操作系统影响,保证移植性

4、Java 浮点常量类型默认 double

5、声明 float 需要在数值后加上“f”或“F”

6、表示形式,必须带小数点

(1)十进制:5.12、5.120f、0.512 <=> .512

(2)科学计数法:5.12e2 <=> 512.0、5.12e-2 <=> 0.0512

7、当运算结果为小数,进行相等判断时,应以两个数差值的绝对值,在某个精度范围内判断

double result = 8.1 / 3;
System.out.println(result);//2.6999999999999997

8、尾数部分

(1)将小数点前面的值固定为 1 的正则表达式

(2)把二进制数表示的小数左移或右移(这里是逻辑移位。因为符号位是独立的)数次后,整数部分的第 1 位变为 1,第 2 位之后都变为 0(为了消除第 2 位以上的数位)

(3)第 1 位的 1 在实际的数据中不保存,由于第 1 位必须是 1,因此,省略该部分后就节省了一个数据位,从而也就可以表示更多的数据范围

(4)单精度浮点数尾数部分的正则表达式(例)

9、指数部分

(1)使用 EXCESS 系统主要是为了表示负数时不使用符号位

(2)EXCESS 系统表现:通过将指数部分表示范围的中间值设为 0,使得负数不需要用符号来表示、

(3)当指数部分是 8 位单精度浮点数时,最大值 11111111 = 255 的 1 / 2,即 01111111 = 127(小数部分舍弃)表示的是 0

(4)当指数部分是 11 位双精度浮点数时,11111111111 = 2047 的 1 / 2,即 01111111111 = 1023(小数部分舍弃)表示的是 0

(5)举例说明:假设用 1~13(A~K)的扑克牌来表示负数,这时可以把中间的扑克牌 7 当成 0。如果扑克牌 7 是 0,10 就表示 +3,3 就表示 -4

10、例

(1)十进制数:0.75

(2)单精度浮点数表示:0 - 01111110 - 10000000000000000000000(破折号是为了区分符号部分、指数部分、尾数部分)

(3)符号部分:0

(4)指数部分:01111110

(5)尾数部分:10000000000000000000000

(6)因为 0.75 是正数,所以符号位是 0

(7)指数部分 01111110 的十进制数是 126,用 EXCESS 系统表现就是 -1(126 - 127 = -1)

(8)根据正则表达式的规则,小数点前面的第 1 位是 1,因此尾数部分 10000000000000000000000 实际上表示的是 1.10000000000000000000000 这个二进制数

(9)将尾数部分的二进制数转换成十进制数,结果就是 1 * 20 + 1 * 2-1 = 1.5

(10)因此,0 - 01111110 - 10000000000000000000000 这个单精度浮点数,表示的就是 +1.5 * 2-1 = +1.5 * 0.5 = +0.75

 

布尔类型

1、只允许取值 true、false,没有 null

2、占用存储空间:1 byte

3、适用于逻辑运算,控制程序流程

4、不可以用 0、非 0 整数代替 false、true

 

字符类型

1、字符常量用单引号括起来的单个字符

2、占用存储空间:2 byte

3、Java 中允许转义字符 '\' 将其后字符转变为特殊字符型常量

4、char 本质是一个整数,有对应 Unicode 码

(1)默认输出 char 时,是 Unicode 码对应的字符

(2)直接给 char 赋一个整数,输出对应 Unicode 字符

(3)若要输出对应数值,可以强制转换类型

(4)char 类型可以进行运算,相当于一个整数

5、字符、码值对应关系是字符编码表规定的

6、字符储存到计算机,将字符对应码值找出

(1)存储:'a' -> 码值 97 -> 二进制 1100001

(2)读取:二进制 1100001 -> 码值 97 -> 'a'

 

字符编码表

1、ASCII:一个字节表示一个字符,只占用后 7 位,首位规定为 0,共 128 个字符,实际一个字节可以表示 256 个字符

2、Unicode:两个字节表示一个字符,字母、汉字统一占用两个字节,兼容ASCII码

3、UTF-8:使用最广,可变长度字符编码,可用 1 - 6 字节表示字符,根据不同字符变化字节,字母使用一个字节,汉字使用三个字节

4、GBK:字母使用一个字节,汉字使用两个字节

5、GB2312:可表示汉字数量小于 GBK

6、Big5:可表示繁体中文

posted @   半条咸鱼  阅读(1234)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示