`
jaesonchen
  • 浏览: 311512 次
  • 来自: ...
社区版块
存档分类
最新评论

深入虚拟机笔记之整数运算

 
阅读更多

第12章 整数运算

 

    二进制补码运算:java虚拟机支持的所有整数类型:byte、short、int、long,它们都是带符号的二进制补码数。在一个二进制补码数中,最重要的位是它的符号位(最高位),0表示正整数和0,1表示负整数。

    能够被二进制补码表示的数值范围为:2的总位数的次幂。其中一半是0和正整数,一半是负整数。

    在带符号二进制补码数上进行的加法运算与在无符号二进制数上进行的加法运算一样。两个数相加(忽略最高位的溢出),结果被解释为一个带符号的二进制补码数。java虚拟机中出现的整数运算的溢出并不会导致抛出异常,其结果只被简单地截短以符合数据类型(int类型或者long类型)。在java编程中,必须随时注意可能发生的溢出,确认所选择的数据类型是否正确。整数被0除时会抛出一个ArithmeticException异常。

    如果long类型的长度仍然不能满足需要,可以使用java.math包中的BigInteger类,这个类的实例可以描述任意长度的整数。BigInteger类支持在任意长度整数上进行的所有数学运算,前提是这些运算是基于java虚拟机和java.lang.Math包所支持的基本类型的。

 

    运算操作码:java虚拟机提供几种进行整数算术运算的操作码,它们执行基于int和long类型的运算。

    整数加法:整数加法可以在int和long类型上进行,弹出栈顶部的两个值,相加,把结果压入栈。必须有指令先把两个相加的整数压入栈中,值的类型由操作码自己决定,最后得到的结果总是与相加的成员具有同样的类型。加法操作码不会导致任何异常抛出,溢出在这里通常被忽略。

   iinc操作码对int类型局部变量执行加法操作,操作码之后的第2个字节被解释为一个8位的二进制补码数。局部变量和8位带符号值相加,结果被写回局部变量。

 
    整数减法:执行int和long类型的减法运算,从栈顶弹出两个相同类型的值,顶端的值充当减数,底端的值充当被减数(底端的值 - 顶端的值),进行减法运算,结果被压入栈。此类操作不会导致抛出异常。

    整数乘法:执行int和long类型的乘法运算,从栈顶弹出两个相同类型的值并相乘,结果被压入栈。此类操作不会导致异常抛出。 

    整数除法:执行int和long类型的除法运算,从栈顶弹出两个相同类型的值,底端的数除以顶端的数(栈顶部的数作为除数或者分母,底端的值 / 顶端的值),结果被压入栈。对于整数除法所产生的结果将今夕取整操作;如果整数被0除(栈顶的值为0),则抛出ArithmeticException异常。

    整数取余:执行int和long类型的取余运算,从栈顶弹出两个相同类型的值,底端的数除以顶端的数(栈顶部的数作为除数或者分母,底端的值 % 顶端的值),除法的余数被压入栈。如果整数被0除(栈顶的值为0),则抛出ArithmeticException异常。

    整数取反:执行int和long类型的取反运算,弹出栈顶部的值,取反,结果被压入栈。此类操作不会导致异常抛出。 

 

 

 

 

 

 

 

 

 

  • 大小: 37.5 KB
  • 大小: 41.5 KB
  • 大小: 39.3 KB
  • 大小: 36.3 KB
  • 大小: 35.9 KB
  • 大小: 40.5 KB
  • 大小: 37 KB
分享到:
评论

相关推荐

    马士兵JAVA笔记(全).docx

    例如,在进行加法运算时,如果一个操作数是整数型,另一个操作数是浮点型,系统会自动将整数型转换为浮点型,然后进行运算。 JAVA中的运算符可以分为算术运算符、关系运算符、逻辑运算符、赋值运算符等。算术运算符...

    python 大神学习笔记

    首先,在Python语言基础方面,笔记涵盖了虚拟机、类型与对象、名字空间、内存管理、编译和执行等基础知识。虚拟机概念是指Python程序是在虚拟机环境中运行的,这使得Python具备了跨平台的特性。类型与对象部分则解释...

    JAVA学习笔记(推荐)

    - `java.math.BigInteger` 用于处理任意精度的整数运算,提供如加法(`add`)、减法(`subtract`)、乘法(`multiply`)、除法(`divide`)、取模(`mod`)以及比较(`compareTo`)等方法。可以通过`BigInteger.valueOf(long x)...

    java笔记全部笔记。。。

    本文将深入探讨Java的开发环境、编译运行过程、Java虚拟机(JVM)、变量的声明与使用,以及Java的基本数据类型。 首先,Java开发环境的核心是Java Development Kit (JDK),它包含了开发、编译和运行Java程序所需的...

    java学习笔记

    ### Java学习笔记知识点详解 #### 第一章:Linux简介与Java环境配置 ##### Linux与Java关系及计算机分类 - **Linux用途**:主要用于服务端,是进行服务端开发的首选操作系统之一。 - **计算机分类**: - **PC机*...

    Python+学习笔记

    ### Python+学习笔记知识点概述 ...通过以上内容的详细介绍,我们可以看出《Python+学习笔记》是一份非常全面的学习资源,涵盖了Python的基础知识到高级特性,适合具有一定编程基础的学习者深入学习和实践。

    Python 学习笔记 第二版.pdf

    ### Python学习笔记第二版知识点概览 #### 一、Python语言基础 - **虚拟机**:Python运行在一种称为Python...通过深入学习这些内容,可以帮助开发者更好地理解和掌握Python语言,从而编写出更加高效、优雅的代码。

    Java基础知识笔记详细版-菜鸟翻阅必备

    ### Java基础知识笔记详细版-菜鸟翻阅必备 #### 一、Java概述 1. **Java语言发展史**: - Java由Sun Microsystems公司于1995年推出。 - 最初由James Gosling领导的设计团队开发,目标是用于家用电器的编程。 - ...

    Java基础笔记.docx

    要开始Java编程,首先需要安装Java开发环境,这包括Java虚拟机(JVM)、Java运行时环境(JRE)和Java开发工具包(JDK)。JDK安装时需要注意避免中文路径和空格,并配置环境变量,比如设置`JAVA_HOME`指向JDK的安装...

    《Java核心技术卷1》 学习笔记.doc

    - `BigInteger`: 实现任意精度的整数运算。 - `BigDecimal`: 实现任意精度的浮点数运算。 - 转换示例: - `BigInteger`: `new BigInteger("123456789")` - `BigDecimal`: `new BigDecimal("123.456")` 以上是对...

    java 精简课堂笔记

    【Java 精简课堂笔记】 Java 是一种广泛使用的面向对象的编程语言,由Sun Microsystems公司(后来被Oracle公司收购)开发。Java以其“一次编写,到处运行”的跨平台特性而闻名,这主要得益于它的虚拟机(JVM,Java ...

    java语言基础与面向对象的笔记

    - 整数运算超过范围会发生溢出。 2. **长整型(long)**: - 占用8个字节。 - 长整型直接量需在数字后加`L`或`l`。 - 使用`System.currentTimeMillis()`获取自1970年1月1日零时起的毫秒数。 3. **浮点型(double)...

    Python 学习笔记

    通过上述总结可以看出,《Python学习笔记》覆盖了从Python基础知识到高级特性的各个方面,不仅适用于Python初学者,也为具有一定基础的学习者提供了深入学习的方向和资源。此外,书中还详细介绍了Python标准库中的...

    java从入门到精通视频笔记

    Java的设计理念是“一次编写,到处运行”,这得益于它的Java虚拟机(JVM),它使得Java程序可以在任何支持JVM的平台上运行。Java分为三个主要平台:Java SE(标准版)主要用于桌面应用,Java EE(企业版)用于网络...

    java笔记大全(内涵面试题)

    本笔记大全将深入探讨Java开发环境、编程基础以及一些常见的面试题,帮助开发者和求职者巩固Java知识。 ### 1. Java开发环境 Java的开发通常需要Java Development Kit (JDK),它是开发Java程序的最小环境。JDK包含...

    韩顺平java视频教程源代码和笔记

    - 使用简单工具(如记事本)可以帮助开发者更深入地理解Java技术。 #### Java语言特点 - **简单性**:易于学习和使用。 - **面向对象**:支持封装、继承和多态等概念。 - **跨平台性**:一次编译,到处运行。 - **...

    java编程笔记(语法类)

    ### Java编程笔记(语法类) #### 一、Java基础概念 **JDK**: Java Development Kit,即Java开发工具包,包含了编译、调试等工具,是进行Java开发的基础。 **JRE**: Java Runtime Environment,Java运行环境,...

    Java学习笔记.pdf

    Java是一种广泛使用的面向对象的编程语言,其设计目标是具有高度的可移植性、安全性和健壮性。...以上是Java学习笔记中涵盖的一些核心概念和知识点,理解并掌握它们对于深入学习Java编程至关重要。

    python学习笔记第二版

    - **1.1 虚拟机**:介绍Python运行时所依赖的虚拟机概念及其实现机制。 - **1.2 类型和对象**:探讨Python中不同类型的数据(如整数、浮点数等)及其对应的对象特性。 - **1.3 名字空间**:解释Python中的命名...

Global site tag (gtag.js) - Google Analytics