豫ICP备17040950号-2

JAR包的搜索查询解压及替换

生产环境中JAR文件部署发布之后,分析排查问题和应急解决问题,基本涉及到熟练对JAR包的一些常规操作:搜索查询某个class文件,搜索查询依赖某个jar包,搜索查询某个配置文件,搜索查询依赖的某个jar包版本是否正确,查看某个class文件内容和文件生成时间,查看某个配置文件内容是否预期一致生效,临时修复jar中某文件内容去覆盖原有jar包中的同名文件,临时增加个新文件到原有jar包中等。这就需要技术人员对JAR的命令格式的灵活运用。

计算机系统基础---浮点数

简单回顾一下,简单来说,用定点数表示数字时,会约定小数点的位置固定不变,整数部分和小数部分分别转换为二进制,就是定点数的结果。

但用定点数表示小数时,存在数值范围、精度范围有限的缺点,所以大多数计算机并没有选择使用定点数表示小数,我们一般使用「浮点数」来表示小数。

这篇文章,我们就来详细看一下浮点数到底是如何表示小数的,以及浮点数的的范围和精度有多大。

浮点数怎么用二进制表示

对于浮点数在计算机中是怎么用二进制表示的,这个知识点让我学了很久,很多资料讲的特别抽象难懂,所以今天我想用自己的方式讲一讲。
学过 《计算机组成原理》 或者类似 《计算机系统》 这些课程的小伙伴们应该都知道,浮点数在计算机中的存储方式遵循IEEE 754 浮点数计数标准,

IEEE二进制浮点数算术标准(IEEE 754) 是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number),一些特殊数值((无穷(Inf)与非数值(NaN)),以及这些数值的“浮点数运算符”;它也指明了四种数值舍入规则和五种例外状况(包括例外发生的时机与处理方式)。

IEEE 754规定了四种表示浮点数值的方式:单精确度(32位)、双精确度(64位)、延伸单精确度(43比特以上,很少使用)与延伸双精确度(79比特以上,通常以80位实现)。只有32位模式有强制要求,其他都是选择性的。大部分编程语言都提供了IEEE浮点数格式与算术,但有些将其列为非必需的。例如,IEEE 754问世之前就有的C语言,现在包括了IEEE算术,但不算作强制要求(C语言的float通常是指IEEE单精确度,而double是指双精确度)。

该标准的全称为IEEE二进制浮点数算术标准(ANSI/IEEE Std 754-1985),又称IEC 60559:1989,微处理器系统的二进制浮点数算术(本来的编号是IEC 559:1989)[1]。后来还有“与基数无关的浮点数”的“IEEE 854-1987标准”,有规定基数为2跟10的状况。现在最新标准是“ISO/IEC/IEEE FDIS 60559:2010”。

在六、七十年代,各家计算机公司的各个型号的计算机,有着千差万别的浮点数表示,却没有一个业界通用的标准。这给数据交换、计算机协同工作造成了极大不便。IEEE的浮点数专业小组于七十年代末期开始酝酿浮点数的标准。在1980年,英特尔公司就推出了单片的8087浮点数协处理器,其浮点数表示法及定义的运算具有足够的合理性、先进性,被IEEE采用作为浮点数的标准,于1985年发布。而在此前,这一标准的内容已在八十年代初期被各计算机公司广泛采用,成了事实上的业界工业标准。加州大学伯克利分校的数值计算与计算机科学教授威廉·卡韩被誉为“浮点数之父”。

如何实现一个简单的寄存器虚拟机

虚拟机总共有两种,基于栈的和基于寄存器的。栈式的生成字节码会更多,但是单个指令比较简单,虚拟机更好设计。基于寄存器方式实现的虚拟机以后更好优化,执行效率会更高。当然硬件层面的寄存器和内存完全是不同的概念。而软件层面的虚拟寄存器就是数据段的内存。比如基于寄存器的虚拟机都是用一个变量(内存)来模拟寄存器。