Java的基本数据类型

本文详细介绍了Java中的强类型特性,包括整数类型(byte, short, int, long)和浮点类型(float, double)的取值范围与精度。针对浮点数,文章深入讲解了它们在计算机中的存储方式,如浮点表示法、指数位的偏移量以及精度问题。同时,提到了double类型的高精度计算优势以及在实际编程中的应用。此外,还提及了char类型的Unicode表示和boolean类型的赋值方式。
摘要由CSDN通过智能技术生成

额外知识: java是强语言类型

  • 强语言类型: 声明变量的时候 确定变量的类型
  • 弱语言类型:声明变量的时候 变量的类型是不确定的

整数类型:

  • byte 1字节 -128 到127
  • short 2字节 -32768 到 32767
  • int 4字节 -147483648 到 2147483647
  • long 8字节 -9223372036854775808 到 -9223372036854775807

浮点类型:

  • float 单精度浮点类型 精确到小数点后8位 4字节
  • double 双精度浮点类型 精确到小数点后17位 8字节
float详解

要想理解 float 和 double 的取值范围和计算精度,必须先了解小数是如何在计算机中存储的:

举个例子:78.375,是一个正小数。要在计算机中存储这个数,需要把它表示为浮点数的格式,先执行二进制转换:

PS:二进制的小数点和十进制的小数点是不同的。二进制小数点后是2的负幂,十进制是10的负幂。

浮点数在计算机中的存储

在计算机中,保存这个数使用的是浮点表示法,分为三大部分:

第一部分用来存储**符号位(sign),**用来区分正负,这里是 0,表示正数

第二部分用来存储**指数(exponent),**这里的指数是十进制的 6

第三部分用来存储**小数(fraction),**这里的小数部分是 001110011

需要注意的是,指数也有正负之分,后面再讲。

如下图所示:

在这里插入图片描述
比如float类型是32位,是单精度浮点表示法:

符号位(sign)占用1位,用来表示正负数。

指数位(exponent)占用 8 位,用来表示指数。

小数位(fraction)占用 23 位,用来表示小数,不足位数补 0。

而 double 类型是 64 位,是双精度浮点表示法:

符号位占用 1 位,指数位占用 11 位,小数位占用 52 位。

到这里其实已经可以隐隐看出:

指数位决定了大小范围,因为指数位能表示的数越大则能表示的数越大嘛!

而小数位决定了计算精度,因为小数位能表示的数越大,则能计算的精度越大咯!

可能还不够明白,举例子吧:

float 的小数位只有 23 位,即二进制的 23 位,能表示的最大的十进制数为 2 的 23 次方,即 8388608,即十进制的 7 位,严格点,精度只能百分百保证十进制的 6 位运算。

double 的小数位有 52 位,对应十进制最大值为 4 503 599 627 370 496,这个数有 16 位,所以计算精度只能百分百保证十进制的 15 位运算。

PS: 我们常见的科学计算器,比如高中时候用的,一般最大支持的运算位数就是 15 位,超过这个就不够准了。在实际编程中,也是用的 double 类型比较多,因为能够保证 15 位的运算。如果还需要更高精度的运算,则需要使用其他数据类型,比如 java 中的 BigDecimal 类型,能够支持更高精度的运算。

指数位的偏移量与无符号表示

需要注意的是指数可能是负数,也有可能是正数,即指数是有符号整数,而有符号整数的计算是比无符号整数麻烦的。所以为了减少不必要的麻烦,在实际存储指数的时候,需要把指数转换成无符号整数。那么怎么转换呢?

注意到 float 的指数部分是 8 位,则指数的取值范围是 -126 到 +127,为了消除负数带来的实际计算上的影响(比如比较大小,加减法等),可以在实际存储的时候,给指数做一个简单的映射,加上一个**偏移量,**比如float的指数偏移量为 127,这样就不会有负数出现了。

比如:

指数如果是 6,则实际存储的是 6+127=133,即把 133 转换为二进制之后再存储。

指数如果是 -3,则实际存储的是 -3+127=124,即把 124 转换为二进制之后再存储。

当我们需要计算实际代表的十进制数的时候,再把指数减去偏移量即可。

对应的 double 类型,存储的时候指数偏移量是 1023。

char类型

在这里插入图片描述

  • Unicode中每个字符都对应一个二进制整数,可以使用多种方式赋值。
  • 字符赋值:char c1 = ‘A’;(通过’'描述为字符赋值)
  • 整数赋值:char c2 = 65;(通过十进制数65在字符集中对应的字符赋值)
  • 进制赋值:char c3 = ‘\u0041’;(通过十六进制数41在字符集中所对应的字符赋值)

布尔类型

在这里插入图片描述
boolean b=true; / 可直接赋值true/false
boolean b1=5>1; /也可赋值一个结果为true/false的表达式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值