这篇文章主要讲解了“java虚拟机知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java虚拟机知识点有哪些”吧!
整数在java虚拟机中以补码的形式保存,
原码:所谓原码,就是符号位加上数字的二进制表示,以int
为例,第1位表示符号位(正数或负数),其余31位表示该数字的二进制值。
反码:所谓反码,就是符号位不变,其余位取反。
补码:负数的补码就是反码加1,正数的补码就是原码本身。
在java中,可以使用位运算查看整数中每一位的实际值,代码如下:
// 打印 -10 在虚拟机内的实际表示 public static void main(String[] args) { int a = -10; for(int i = 0; i < 32; i++) { int t = (a & 0x8000_0000 >>> i) >>> (31 - i); System.out.print(t); } }
这段程序的基本思想是,进行32次循环,每次循环取出int
值中的一位,第3行的 0x8000_0000
是一个首位为1,其余位为0的整数,通过右移i位,定位到要获取的第i位,并将除该位外的其他位统一设置为0,而该位不变,最近将该位移至最右,并进行输出。
使用补码的好处
可以统一数字0的表示。0既是非正数,又是非负数,使用原码表示时符号位难以确定,把0归入正数或者负数得到的原码是不同的。但是使用补码表示时,无论把0归入正数还是负数都会得到相同的结果。
使用补码可以简化整数的加减法计算,将减法计算视为加法计算,实现减法和加法的完全统一,实现正数和负数加法的统一。
在java虚拟机中,浮点数有float
和double
两种,分别是32位和64位浮点数。浮点数在java虚拟机中表示比整数略显复杂。目前使用最为广泛的是由 IEEE 754
定义的浮点数格式。
在IEEE 754
的定义中,一个浮点数由3部分组成:符号位、指数位 和 尾数位。以32位float类型为例,符号位占1位,表示正负数,指数位占8位,尾数为点剩余23位。
31位为符号位:0表示正数,1表示负数
31~23位:共8位表示指数位,内存存储数据从0~2^8-1=255,由于指数可以是正也可以是负,所以指数位采用移位存储表示数据,8位有符号有可表示数据从-128~127,所以指数位表示的实际指数应该是无符号位数减去127,例如0000 0000表示为0-127=-127,1111 1111表示为255-127=128,1000 0001表示为129-127=2
22~0位:共23位表示尾数位,内存存储数据从0~2^23-1=8388607
在java中,使用Float.floatToRawIntBits()
函数可以获得一个单精度浮点数的 IEEE 754
表示,如下:
public static void main(String[] args) { float a = -5; System.out.println(Integer.toBinaryString(Float.floatToIntBits(a))); }
感谢各位的阅读,以上就是“java虚拟机知识点有哪些”的内容了,经过本文的学习后,相信大家对java虚拟机知识点有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。