任何浮点值集的有限非零值都可以表示为 s·m·2^(e-N+1),其中 s 为+1或-1,m 为小于 2N 的正整数,e是Emin = - ((2^(K-1))-2)和Emax = (2^(K-1))-1 之间的整数,其中 N 和 K 是取决于值集的参数。有些值可以多种方式表示在这种形式中;例如,假设值集中的值 v 可能使用 s,m 和 e 的某些值以此形式表示,那么如果发生了 m 均匀且 e 小于 2^(K-1),则可以将 m 减半并且将 e 增加 1 以产生相同值 v 的第二表示。如果 m ≥ 2^(N-1),则以这种形式表示称为归一化;否则该表示被称为非规范化。如果值集中的值不能以m ≥ 2^N-1^的方式表示,则该值被称为非正规化值,因为它没有归一化表示。
下表总结了对两个必需和两个可选浮点值集的参数 N 和 K (以及导出参数 Emin 和 Emax)的约束
Java 虚拟机结构(1)
主要内容:
class 文件
这里需要注意的是 class 文件中存储的是二进制格式的数据,关于它的格式以及如何解析将在后文学习。
数据类型
iadd
操作int
类型数据,fadd
操作float
类型数据。对象是动态分配的类示例或数组
关于这句话,类的实例 = 对象,这个很好理解,那么为什么数组也包含在对象中?
先来执行一段代码:
输出:
可以看出数组确实是对象,并且它的格式也很有规律,根据数组中元素和维度不同可以分为:
int
、long
...):[类型缩写
[L类全限定名;
[
[
,其余内容同一维。原始类型和值
数字类型(numeric)
整数类型:
byte
:其值为 8 位有符号二进制补码整数,其默认值为零(1 Byte),范围[-2^7^, 2^7^-1] 即 [-128, 127]short
:其值为 16 位有符号二进制补码整数,其默认值为零(2 Byte),范围[-2^15^, 2^15^-1] 即 [-32768, 32767]int
:其值为 32 位有符号二进制补码整数,其默认值为零(4 Byte),范围[-2^31^, 2^31^-1] 即 [-2147483648, 2147483647]long
:其值为 64 位有符号二进制补码整数,其默认值为零(8 Byte),范围[-2^63^, 2^63^-1] 即 [-9223372036854775808, 9223372036854775807]char
:其值为 16 位==无==符号二进制补码整数,其默认值为零(2 Byte),范围[0, 2^16^-1] 即 [0, 65535]有符号类型由于要使用 1 位(首位)二进制数,作为符号位,因此所能表达的最大值约等于无符号类型的一半。
:warning: 字节(Byte):1 字节 = 8 比特(bit)。
:new:顺便一提,端口号的范围也是:[0, 65535],可以推出端口号也是由 2 字节表示的。
浮点类型:
float
:其值是float
集的元素,或者,如果支持,则为float-extended-exponent
值集,其默认值为正零double
:其值是double
值集的元素,或者,如果支持,则为double-extended-exponent
值集,其默认值为正零布尔类型(boolean)
boolean 类型:布尔类型的值编码真值
true
和false
,默认值为false
。返回地址类型(returnAddress)
returnAddress
类型的值 是指向 Java 虚拟机指令的操作码的指针。在原始类型中,只有returnAddress
类型与 Java 编程语言类型没有直接关联。浮点类型,集值和值
:warning:下文为懵逼的内容
下表总结了对两个必需和两个可选浮点值集的参数 N 和 K (以及导出参数 Emin 和 Emax)的约束
除
NaNs
外,浮点值集的值是有序的。当从最小到最大排列时,它们是负无穷大,负有限值,正负零,正有限值,和正无穷大。浮点正零和浮点负零比较相等。但还有其他操作可以区分,eg:将1.0 除以 0.0 会产生正无穷大,但将 1.0 除以 -0.0 会产生负无穷大。
NaNs
是无序的,因此如果其操作数中的一个或两个都是NaN
,则数值比较和数值相等的测试具有值false。特别是,当且仅当值为NaN
时,对值自身的数值相等性的测试具有值false。如果任一操作数是NaN,则对数值不等式的测试值为true。简单来说:
A == B
,其中 A 或 B 为NaN
,则此表达式值为 falseNaN
≠NaN
(true)A != B
,其中 A 或 B 为NaN
,则此表达式值为 truereturnAddress 类型和值
returnAddress
类型是使用 Java 虚拟机的 jsr、ret、jsr_w 指令。returnAddress
类型的值是指向Java虚拟机指令的操作码的指针。与数字基元类型不同,该
returnAddress
类型不对应于任何Java编程语言类型,并且不能由正在运行的程序修改。boolean 类型
引用类型和值