字节码文件结构

5 篇文章 0 订阅
订阅专栏

         Java 虚拟机使用字节码实现了跨平台的愿景,无论什么系统,我们都可以使用 Java 虚拟机解释执行字节码文件。但其实字节码是有一套规范的,而规定字节码格式的就是《Java 虚拟机规范》。《Java 虚拟机规范》规定了 Java 虚拟机结构、Class 类文件结构、字节码指令等内容。其中类文件结构是有必要了解的一个内容。

        字节码文件结构是一组以 8 位为最小基础的十六进制数据流, 各个数据项按顺序紧密的从前向后排列, 相邻的项之间没有间隙, 这样可以使得class文件非常紧凑, 体积轻巧, 可以被JVM快速的加载至内存, 并且占据较少的内存空间(方便于网络的传输)。在字节码结构中,有两种最基本的数据类型来表示字节码文件格式,分别是:无符号数和表。

        无符号数属于最基本的数据类型。它以 u1、u2、u4、u8 来分别代表 1 个字节、2 个字节、4 个字节、8 个字节的无符号数。无符号数可以用来描述数字、索引引用、数量值或者按照 UTF-8 编码构成的字符串值。例如下表中第一行中的 u4 表示 Class 文件前 4 个字节表示该文件的魔数,第二行的 u2 表示该 Class 文件第 5-6 个字节表示该 JDK 的次版本号。

        表是由多个无符号数或者其他表作为数据项构成的复合数据类型。所有表都习惯性地以_info结尾。表用于描述有层次关系的复合结构的数据,例如下表第 5 行表示其实一个类型为 cp_info 的表(常量池),这里面存储了该类的所有常量。

        而整个字节码文件本质上就是一张表,它由下面几个部分组成:

         为了便于理解,可以将一个完整的表划分为以下七个部分,这七个部分组成了一个完整的 Class 字节码文件:

  • 魔数与Class文件版本
  • 常量池
  • 访问标志
  • 类索引、父类索引、接口索引
  • 字段表集合
  • 方法表集合
  • 属性表集合

         以一个Demo.class文件为例来说明:

public class Demo{
	public static void main(String args[]){
		System.out.println("Hello World.");
  }
}

        接着在命令行运行javac Demo.java命令编译这个类,这时会生成一个 Demo.class 文件。

        打开生成的 Demo.class 文件:

​​​​​​​cafe babe 0000 0034 001d 0a00 0600 0f09 
0010 0011 0800 120a 0013 0014 0700 1507 
0016 0100 063c 696e 6974 3e01 0003 2829 
5601 0004 436f 6465 0100 0f4c 696e 654e 
756d 6265 7254 6162 6c65 0100 046d 6169 
6e01 0016 285b 4c6a 6176 612f 6c61 6e67 
2f53 7472 696e 673b 2956 0100 0a53 6f75 
7263 6546 696c 6501 0009 4465 6d6f 2e6a 
6176 610c 0007 0008 0700 170c 0018 0019 
0100 0b48 656c 6c6f 2057 6f72 6c64 0700 
1a0c 001b 001c 0100 0444 656d 6f01 0010 
6a61 7661 2f6c 616e 672f 4f62 6a65 6374 
0100 106a 6176 612f 6c61 6e67 2f53 7973 
7465 6d01 0003 6f75 7401 0015 4c6a 6176 
612f 696f 2f50 7269 6e74 5374 7265 616d 
3b01 0013 6a61 7661 2f69 6f2f 5072 696e 
7453 7472 6561 6d01 0007 7072 696e 746c 
6e01 0015 284c 6a61 7661 2f6c 616e 672f 
5374 7269 6e67 3b29 5600 2100 0500 0600 
0000 0000 0200 0100 0700 0800 0100 0900 
0000 1d00 0100 0100 0000 052a b700 01b1 
0000 0001 000a 0000 0006 0001 0000 0001 
0009 000b 000c 0001 0009 0000 0025 0002 
0001 0000 0009 b200 0212 03b6 0004 b100 
0000 0100 0a00 0000 0a00 0200 0000 0300 ​​​​​​​
0800 0400 0100 0d00 0000 0200 0e

魔数与Class文件版本

         Class 文件的第 1 - 4 个字节代表了该文件的魔数(Magic Number)。它唯一的作用是确定这个文件是否为一个能被虚拟机接受的 Class 文件,其值固定是:0xCAFEBABE(咖啡宝贝)。如果一个 Class 文件的魔数不是 0xCAFEBABE,那么虚拟机将拒绝运行这个文件。

        Class 文件的第 5 - 6 个字节代表了 Class 文件的次版本号(Minor Version),即编译该 Class 文件的 JDK 次版本号

        Class 文件的第 7 - 8 个字节代表了 Class 文件的主版本号(Major Version),即编译该 Class 文件的 JDK 主版本号。

        高版本的 JDK 能向下兼容以前笨笨的 Class 文件,但不能运行新版本的 Class 文件。例如一个 Class 文件是使用 JDK 1.5 编译的,那么我们可以用 JDK 1.7 虚拟机运行它,但不能用 JDK 1.4 虚拟机运行它。下表列出了各个版本 JDK 的十六进制版本号信息:

常量池

        紧跟版本信息之后的是常量池信息,其中前 2 个字节表示常量池个数,其后的不定长数据则表示常量池的具体信息。

        我们可以从上图知道,常量池的常量都是由cp_info这种表结构组成的,而且表结构不同其大小也不同。在 Java 虚拟机规范中一共有 14 种 cp_info 类型的表结构。

        

         而上面这些 cp_info 表结构又有不同的数据结构,其对应的数据结构如下图所示。

   cp_info表结构一共有三个字段,第一个字段表示这个表结构的标示值,有一个字节大小,对应我们上一个表格中的数字。第二、三个字段表示其表结构的描述,不同字段其意思不太一样。

        看到这里可能有点犯模糊,这么些表格到底应该怎么用呢?没关系,我们举个例子就清楚了。

        接下来我们继续看看 Hello World 字节码文件的内容。上一小节说到字节码文件的版本,那么接下来就是常量池的内容了。

         Hello World 文件字节码对应的内容是:00 1d,其值为 29,表示一共有 29 - 1 = 28 个常量。

         紧跟着常量池的就是 28 个常量了,因为每个常量都对应不同的类型,所以我们无法得知其具体大小,只能一个个分析。

        第 1 个常量。紧接着 001d 的后一个字节为 0A,为十进制数字 10,查表可知其为方法引用类型(CONSTANT_Methodref_info)的常量。

         再查 cp_info 对应的表结构知道,该常量项第 2 - 3 个字节表示类信息,第 4 - 5 个字节表示名称及类描述符。

        接下来我们取出这部分的数据:0a 0006 000f

 

         该常量项第 2 - 3 个字节,其值为 00 06,表示指向常量池第 6 个常量所表示的信息。根据后面我们分析的结果知道第 6 个常量是 java/lang/Object 。第 4 - 5 个字节,其值为 000f,表示指向常量池第 15 个常量所表示的信息,根据 javap 反编译出来的信息可知第 10 个常量是 <init>:()V。将这两者组合起来就是:java/lang/Object.<init>:V,即 Object 的 init 初始化方法。

        大致就是按照上面的方式去分析每一个常量的值和意义。

        我们通过手动分析,可以了解常量池的构成,但很多时候我们可以借助 JDK 提供的 javap 命令直接查看 Class 文件的常量池信息。

        注:

        javap是jdk自带的反解析工具。它的作用就是根据class字节码文件,反解析出当前类对应的code区(汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息。

        

          当我们运行javap -verbose Demo.class时,控制台会打印出该 Class 文件的构成信息,其中就包括了常量池的信息。

 访问标志

         在常量池结束之后,紧接着的两个字节代表类或接口的访问标记(access_flags)。这里的数据为 00 21。

        这个标志用于识别一些类或者接口层次的访问信息,包括:这个Class是类还是接口、是否定义为public类型、是否定义为abstract类型等。具体的标志位以及标志的含义见下表。

        在这里这两个字节是 00 21,通过查看我们并没有发现有标志值是 00 21 的标志名称。这是因为这里的访问标志可能是由多个标志名称组成的,所以字节码文件中的标志值其实是多个值进行或运算的结果。

        通过查阅上述表格,我们可以知道,00 21 由 00 01(第1行)和 00 20(第3行)进行或运算得来。也就是说该类的访问标志是 public 并且允许使用 invokespecial 字节码指令的新语义。

类索引、父类索引、接口索引

        在访问标记后,则是类索引、父类索引、接口索引的数据,这里数据为:00 05 00 06 00 00。

        类索引和父类索引都是一个u2类型的数据,而接口索引集合是一组u2类型的数据的集合,Class 文件中由这三项数据来确定这个类的继承关系。

        类索引。类索引用于确定这个类的全限定名,它用一个 u2 类型的数据表示。这里的类索引是 00 05 表示其指向了常量池中第 5 个常量,通过我们之前的分析,我们知道第 5 个常量其最终的信息是 Demo 类。

        父类索引。父类索引用于确定这个类的父类的全限定名,父类索引用一个u2类型的数据表示。这里的父类索引是 00 06 表示其指向了常量池中第 6 个常量,通过我们之前的分析,我们知道第 6 个常量其最终的信息是 Object 类。因为其并没有继承任何类,所以 Demo 类的父类就是默认的 Object 类。

        接口索引。接口索引集合就用来描述哪个类实现了哪些接口,这些被实现的接口将按 implements 语句(如果这个类本身就是一个接口,则应当是extends语句)后的接口顺序从左到右排列在接口索引集合中。对于接口索引集合,入口第一项是 u2 类型的数据为接口计数器(interfaces_count),表示索引表的容量,而在接口计数器后则紧跟着所有的接口信息。如果该类没有实现任何接口,则该计数器值为0,后面接口的索引表不再占用任何字节。

        这里 Demo 类的字节码文件中,因为并没有实现任何接口,所以紧跟着父类索引后的两个字节是0x0000,这表示该类没有实现任何接口。因此后面的接口索引表为空。

 字段表集合

        字段表集合用于描述接口或者类中声明的变量,这里的数据为:00 00。

        这里说的字段包括类级变量和实例级变量,但不包括在方法内部声明的局部变量。在类接口集合后的2个字节是一个字段计数器,表示总有有几个属性字段。在字段计数器后,才是具体的属性数据。

        字段表的每个字段用一个名为 field_info 的表来表示,field_info 表的数据结构如下所示:

         因为我们并没有声明任何的类成员变量或类变量,所以在 Demo 的字节码文件中,字段计数器为 00 00,表示没有属性字段。

 方法表集合

        在字段表后的 2 个字节是一个方法计数器,表示类中总有有几个方法,在字段计数器后,才是具体的方法数据。这里数据为:00 02 。

 方法表中的每个方法都用一个 method_info 表示,其数据结构如下:

         Demo 类的字节码文件中,方法计数器的值为 00 02,表示一共有 2 个方法。

        第 1 个方法,这里数据为:00 01 00 07 00 08 00 01 00 09 00 0000 1d 00 01 00 01 00 0000 05 2a b7 00 01 b1 0000 0001 000a 0000 0006 0001 0000 0001。方法计数器后 2 个字节表示方法访问标识,这里是 00 01,表示其实 ACC_PUBLIC 标识,对比上面的图表可知其表示 public 访问标识。紧接着 2 个字节表示方法名称的索引,这里是 00 07 表示指向了常量池第 7 个常量,查阅可知其指向了<init>。紧接着的 2 个字节表示方法描述符索引项,这里是 00 08 表示指向了常量池第 8 个常量,查阅可知其指向了()V

        紧接着 2 个字节表示属性表计数器,这里是 00 01 表示该方法的属性表一共有 1 个属性。属性表的表结构如下:

         前两个字节是名字索引、接着 4 个字节是属性长度、接着是属性的值。这里前两个字节为 0009,指向了常量池第9个常量,查询可知其值为Code,说明此属性是方法的字节码描述。 Code 属性的表结构如下:

        根据 Code 属性对应表结构知道,前 2 个字节为 0009,即常量池第 9 个常量,查询知道是字符串常量Code。接着 4 个字节表示属性长度,这里值为 1D,即 29 的长度。下面我们继续分析 Code 属性的数据内容。

        紧接着 2 个字节为 max_stack 属性。这里数据为 00 01,表示操作数栈深度的最大值。

        紧接着 2 个字节为 max_locals属性。这里是数据为 00 01,表示局部变量表所需的存储空间为 1 个 Slot。在这里 max_locals的单位是Slot,Slot是虚拟机为局部变量分配内存所使用的最小单位。

        接着 4 个字节为 code_length,表示生成字节码这里给的长度。这里数据为 00 00 00 05,表示生成字节码长度为 5 个字节。那么紧接着 5 个自己就是对应的数据,这里数据为 2a b7 00 01 b1,这一串数据其实就是字节码指令。通过查询字节码指令表,可知其对应的字节码指令:

  • 读入2A,查表得0x2A对应的指令为aload_0,这个指令的含义是将第0个Slot中为reference类型的本地变量推送到操作数栈顶。
  • 读入B7,查表得0xB7对应的指令为invokespecial,这条指令的作用是以栈顶的reference类型的数据所指向的对象作为方法接收者,调用此对象的实例构造器方法、private方法或者它的父类的方法。这个方法有一个u2类型的参数说明具体调用哪一个方法,它指向常量池中的一个CONSTANT_Methodref_info类型常量,即此方法的方法符号引用。
  • 读入00 01,这是invokespecial的参数,查常量池得0x0001对应的常量为实例构造器“”方法的符号引用。
  • 读入B1,查表得0xB1对应的指令为return,含义是返回此方法,并且返回值为void。这条指令执行后,当前方法结束。

        接着 2 个字节为异常表长度,这里数据为 00 00,表示没有异常表数据。那么接下来也就不会有异常表的值。

        紧接着 2 个字节是属性表的长度,这里数据为 00 01,表示有一个属性。该属性长度为一个 attribute_info 那么长。attribute_info 属性表的表结构如下。

        首先,前两个字节表示属性名称索引,这里数据为:00 0A。指向了第 10 个常量,查阅可知值为:LineNumberTable。LineNumberTable 表的表结构如下图所示。 

 

         其前两个字节是属性名称索引,就是上面已经分析过的 00 0A。

        接着 4 个字节是属性长度,这里数据为 00 00 00 06,表示有 6 个字节的数据。接着 2 个字节是 LineNumberTable 的长度,这里数据是 00 01,表示长度为 1。接着跟着 1 个 line_number_info 类型的数据,下面是 line_number_info 表的结构,其包含了 start_pc 和 line_number 两个 u2 类型的数据项。前者是字节码行号,后者是 Java 源码行号。

        那么接下来 2 个字节为 00 00,即 start_pc 表示的字节码行号为第 0 行。接着 00 01,即 line_number 表示 Java 源码行号为第 1 行。

        到此,我们方法表集合的第一个方法分析结束。我们通过 javap 反编译查看,可以看到 Code 和 LineNumberTable 都是完全正确的。

         第二个方法就不分析了。

属性表集合

        这里或许有人会迷惑,上面我们不是分析过属性表了么。其实上面分析的是方法中的属性,而这个是类中的属性。这个就像局部变量和类成员变量一样,是不同的。

        紧接着我们剩下的数据为:00 0100 0d00 0000 0200 0e,这些就是属性表集合的数据了。

         根据上面的表格我们知道,紧跟着的 2 个字节数据是属性表属性数量,这里数据为 00 01,表示有 1 个属性。后面紧跟着 1 个表结构为 attribute_info 的属性数据。attribute_info 表的结构如下图所示

         前两个字段为属性名称索引,这里数据为 00 0d,表示第 13 个常量池,查询可知这里的值是:SourceFile。SourceFile 属性的表结构如下图所示

         SourceFile 表结构前两个字节我们已经分析过,数据为 00 0d,表示第 13 个常量池,指的是SourceFile这个值。接着我们看后面 4 个字节,这里数据为 00 00 00 02,表示属性长度为 2 个字节。紧跟着的 2 个字节表示 SourceFile 的常量池索引,即该字节码文件的源文件名称,这里数据是 00 0e,即常量池的第 14 项,即Demo.java。所以这个属性项标识了该字节码文件的源文件名称为 Demo.java。

        我们通过 javap 反编译一下,可以发现与我们的分析完全一致。

         到这里,我们就从头到尾将字节码文件的每个字节的数据分析完毕。通过这么一次分析,相信大家对于字节码文件的构成已经了然于胸了。

        但在实际使用或分析问题的时候,我们通常用 javap 工具帮助我们完成这个过程,这样能提高效率。使用 javap 工具很简单,只需要这样使用:javap -verbose Demo.class 就可以将字节码文件全部分析出来

总结

        通过对 Hello World 的解析,从而对 Java 类文件结构有了一个全面的认识。进一步还简单了解了 Java 虚拟机以及 Java 虚拟机规范。 最后用一张图来总结一下:

 

参考文档:

        JVM基础系列第5讲:字节码文件结构 - 陈树义 - 博客园

【Java】一篇文章让你了解字节码是什么
程序员徐小白的博客
05-15 3518
1. 先来说一下什么是机械码 机械码就是cpu能够直接读取并运行的代码,它是用**二进制编码**表示的,也叫做机械指令码。在编写这种代码时,需要**主动地去控制cpu**的一切资源,而且需要记住全部指令所做的动作,十分的麻烦,当然这也是计算机的底层代码,处理开发计算机的专业人员之外,已经很少人去研究了。 2.字节字节码是一种**中间状态**的**二进制文件**,是由源码编译过来的,可读性没有源码的高。cpu并不能直接读取字节码,在java中,字节码**需要经过JVM转译**成机械码之后,cpu
字节码(.class)文件解读
jackzhang11的博客
12-02 7431
字节文件是什么 我们在命令后使用 java 命令,就能将java源文件(.java)编译成对应的字节文件(.class)。字节文件是一种八位字节的二进制流文件,各个数据项按照一定顺序从前到后紧密排列。因此,这样的安排会使得字节文件非常紧凑,可以被jvm快速的加载到内存中,并且占用较少的内存空间。 java源文件在被编译器编译之后,每个类(或者接口)都单独占据一个字节文件。类中所有信息都在字节文件中有所描述,由于字节文件非常灵活,它对类的描述能力甚至强于java源文件字节文件中的信息是一项
什么是字节码?
最新发布
qq_33326733的博客
05-14 627
字节码(Bytecode)是Java虚拟机(JVM)能够理解和执行的中间代码。Java源代码首先编译成字节文件(扩展名为 .class),而不是直接编译成特定机器的机器码。
初探Java字节码格式,编程解析字节文件
qq_44525150的博客
04-18 2100
本文较为详细的探讨了Java字节文件(.class文件)的格式,并以HelloWorld.java的字节文件为例,带读者逐个字节文件进行解析,最后使用Java编程实现了对.class文件的解析过程 本文比较直观的对读者阅读字节文件,对于初学者是一个字节码格式学习较好的入门教程,对于OG来说,这也是比较好的复习资料
什么是字节码?
理想主义的花终将盛开在浪漫主义的土壤里,我的热情永远不会熄灭在现实的平凡之中,我们终将上岸,阳光万里。
10-05 5840
文章目录什么是字节码?采用字节码的好处是什么?机器码字节码java中的编译器和解释器采用字节码的好处什么是字节文件? 什么是字节码?采用字节码的好处是什么?   机器码 机器码:机器码就是cpu能够直接读取并运行的代码,用二进制编码表示,也叫做机器指令码。   字节字节码:字节码是一种中间状态的二进制代码,是由源码编译过来的,可读性没有源码高。而且cpu也不能够直接读取字节码,在java中,字节码需要经过JVM虚拟机转译成机器码之后,cpu才能够读取并运行。   java
字节文件字节码指令
Earl_yuan的专栏
05-21 4601
我记得开始学习Java的第一堂课时,我的大学老师是这样说的,Java号称是“一次编写,到处运行”,为什么有底气这样说,是因为Java程序并不是直接运行在操作系统上的,它通过不同操作系统上的Java虚拟机实现了“到处运行”的美好愿景。而且我的老师当时还说过,不止Java程序可以在Java虚拟机上运行,其他的程序也同样可以在Java虚拟机上运行。Java虚拟机并不认识具体的某种编程语言,而是编程语言要...
字节文件结构详解.docx
06-26
“一次编写,到处运行(Write Once,Run Anywhere)“,这是 Java 诞生之时一个非常著名的口号。在学习 Java 之初,就了解到了我们所写的.java会被...因此了解 Class 字节文件对于我们开发、逆向都是十分有帮助的。
从一个class文件深入理解Java字节结构
11-15
我们都知道,Java程序最终是转换成class文件执行在虚拟机上的,那么class文件是个怎样的结构,虚拟机又是如何处理去执行class文件里面的内容呢,这篇文章带你深入理解Java字节码中的结构。 1.Demo源码 首先,编写一...
java字节码.docx
04-12
常量池是 Java 字节文件中的一种数据结构,它存储了 Java 字节文件中的常量信息。常量池的结构主要包括常量池的大小、常量池的索引、常量池的内容等。在本例中,常量池的大小为 27 个。 访问标识符(Access ...
class文件结构解析字节码后文件
09-25
class文件结构解析字节码后文件
Java字节码简单说明.docx
03-10
Class 文件结构是 Java 字节码的载体,它是一种特殊的二进制文件格式,包含了 Java 虚拟机指令集和符号表以及若干其他辅助信息。Class 文件中存储了 Java 程序的定义信息,但它并不一定以磁盘文件的形式存在。 ...
字节码?原来如此!
人人都是程序员
05-26 1266
目录 什么是字节码? 字节文件内容如下: 字节结构 魔数: 版本号: Access_flags访问标志 当前类名 父类名称 接口信息 字段表 方法表 附加属性表 有哪些操作查看字节码? 第一步: javac A.java 编译生成 A.class 第二步: 使用 javap -c A.class 或 javap -verbose A.class 都可查看字节文件 什么是字节码? 字节码(Byte-code)是一种包含执行程序、由一序列 op 代码/数据对..
什么是字节码?采用字节码的大好处是什么?
qq_44872509的博客
04-20 418
Java源程序经过编译 器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行,这就是上面提到的Java的特点的编译与解释并存的解释。在Java中,这种供虚拟机理解的代码叫做字节码(即扩展为.class的文件),它不面向任何特定的处理器,只面向虚拟机。字节码:Java源代码经过虚拟机编译器编译后产生的文件(即扩展为.class的文件),它不面向任何特定的处理器,只面向虚拟机。
字节码简介
学无止境
12-31 3870
什么是字节码? Java的使命就是一次编写,到处执行。在不同的操作系统,不同硬件平台上,均可以不用修改代码即可顺畅地执行。Java是如何实现跨平台的?答案是增加一个中间层,即字节码(Bytecode)。 Java所有的指令有200个左右,一个字节(8位)可以存储256种不同的指令信息,一个这样的字节称为字节码。 在代码的执行过程中,JVM将字节码解释执行,屏蔽对底层操作系统的依赖。JVM也可...
python dis模块操作字节
lovjiaying的博客
12-30 367
Python中的字节码(bytecode)是一种数据类型
Byte 高位/低位简介绍(大端格式/小端格式)
艾利克斯冰的博客
08-19 6171
Byte 高位/低位简介绍
JVM探秘(二)-字节文件结构(基础篇)
weixin_41489022的博客
01-18 671
小伙伴们,大家好: 今天是JVM系列的第二篇,字节结构详解。在讲解字节文件之前,我觉得有必要聊聊我们为什么要学习字节码。很多小伙伴可能会有这样的想法,我编程用不上字节文件,我学它干啥?那小伙伴们想一想,在你没有学习虚拟机之前,假设你的项目再线上遇到一个CPU占用率高的问题,你是不是只能逛逛博客,百度,寻求问题的解决方案,但是在你学习虚拟机之后,你可能会尝试着使用jstack等故障诊断工具区排查问题。又比如在你未曾看JDK源码之前,你遇到一个异常,是否又只能去百度,但是如果你看了源码,你会想着去从源码的
JVM 字节文件结构
xiangxiongfly
03-03 1030
Java源代码通过 javac 命令编译生产 .class 字节文件。 使用javap命令查看字节文件。如:javap -v Person.class 输出字节码信息,或 javap -v -p Person.class 输出完整字节码信息。 可以安装 jclasslib 插件查看。
计算机中各个数据类型的字节,数据格式,计算机中数据格式详细介绍
weixin_39637260的博客
07-22 2629
数据格式,计算机中数据格式详细介绍计算机中常用的数据表示格式有两种,一是定点格式,二是浮点格式。一般来说,定点格式容许的数值范围有限,但要求的处理硬件比较简单。而浮点格式容许的数值范围很大,但要求的处理硬件比较复杂。1.定点数的表示方法定点表示:约定机器中所有数据的小数点位置是固定不变的。由于约定在固定的位置,小数点就不再使用记号“.”来表示。通常将数据表示成纯小数或纯整数。定点数x=x0x1x2...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • SpringBoot多数据源配置 9271
  • Object类的常用方法 6299
  • java生产者消费者模型 4874
  • SpringCloud服务熔断与降级 3989
  • SpringCloud之Resilience4J 3163

分类专栏

  • java基础学习笔记 10篇
  • java常用设计模式 3篇
  • java并发 5篇
  • 学习笔记 16篇
  • 分布式学习笔记 8篇
  • 数据库学习笔记 3篇
  • JVM学习笔记 5篇
  • Spring学习笔记 4篇

最新评论

  • java生产者消费者模型

    哪种语言最好: 不建议对String类型加Synchronized,具体见https://blog.csdn.net/qq_28295947/article/details/112853423

  • 三种分布式锁实现方式

    Eliauk~~: 可重入

  • 三种分布式锁实现方式

    小伙子wei: for update同一事务下是可重入的吧??

  • kafka学习笔记

    大家一起学编程(python): 六六六

  • kafka学习笔记

    彼 方: 好文,已收藏,来占坑,👍 坚持写博客,好的习惯,值得学习,欢迎回访我的博客

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • java设计模式之责任链模式
  • java生产者消费者模型
  • ReentrantLock及Condition
2022年1篇
2021年53篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

装修网河源精装房儿童房装修秘密基地绿色的装修是什么风格的包厢ktv装修效果图感恩节 装饰方林别墅装修所有装修130平简装全包多少钱简装洋河大曲价格客厅小户型简装图片简装 报价新都精装怀化有名的十大装饰公司武汉哪家装饰好精装房再装修大概多少钱农村房简装成都家装行业天津 公装 装修公司三室二厅装修简装精装修最低多少钱河北装修装饰晋中十大装修公司硚口装修公司3万元简装简装出租多少钱装修公司开工黄道吉日天鹅湖装修公司杭州的公装公司两室一厅小户型简装图常平装修公司香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声汪小菲曝离婚始末卫健委通报少年有偿捐血浆16次猝死单亲妈妈陷入热恋 14岁儿子报警雅江山火三名扑火人员牺牲系谣言手机成瘾是影响睡眠质量重要因素男子被猫抓伤后确诊“猫抓病”中国拥有亿元资产的家庭达13.3万户高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了男孩8年未见母亲被告知被遗忘张家界的山上“长”满了韩国人?倪萍分享减重40斤方法许家印被限制高消费网友洛杉矶偶遇贾玲何赛飞追着代拍打小米汽车超级工厂正式揭幕男子被流浪猫绊倒 投喂者赔24万沉迷短剧的人就像掉进了杀猪盘特朗普无法缴纳4.54亿美元罚金周杰伦一审败诉网易杨倩无缘巴黎奥运专访95后高颜值猪保姆德国打算提及普京时仅用姓名西双版纳热带植物园回应蜉蝣大爆发七年后宇文玥被薅头发捞上岸房客欠租失踪 房东直发愁“重生之我在北大当嫡校长”校方回应护栏损坏小学生课间坠楼当地回应沈阳致3死车祸车主疑毒驾事业单位女子向同事水杯投不明物质路边卖淀粉肠阿姨主动出示声明书黑马情侣提车了奥巴马现身唐宁街 黑色着装引猜测老人退休金被冒领16年 金额超20万张立群任西安交通大学校长王树国卸任西安交大校长 师生送别西藏招商引资投资者子女可当地高考胖东来员工每周单休无小长假兔狲“狲大娘”因病死亡外国人感慨凌晨的中国很安全恒大被罚41.75亿到底怎么缴考生莫言也上北大硕士复试名单了专家建议不必谈骨泥色变“开封王婆”爆火:促成四五十对测试车高速逃费 小米:已补缴天水麻辣烫把捣辣椒大爷累坏了

装修网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化