在Java中,使用算术操作+, - ,*,//指示加上减法,乘法和划分。当涉及的两个操作/操作是整数时,则指示整数删除;否则,表示浮点拆卸方法。我们的整数搜索操作(有时称为模制)由%表示。例如,15/2等于7,15%2等于1,15.0/2等于7.5。
应该注意的是,整数0将产生异常,并且浮点数分为无限或NAN结果。
简化的格式可用于在分配语句中编写双重算术运算符。
例如,
相当于
(通常,将操作员放在分配号的左侧,例如*=或%=)
注意:可移植性是Java语言的设计目标之一。无论是虚拟机的运行,相同的操作都应获得相同的结果。对于浮动算术数字 - 要实现此类便携性非常困难。Double类型使用64位存储双重值,而某些处理器使用80个浮点-Point寄存器。这些寄存器提高了中间过程的计算精度。例如,以下操作:
double w = x*y/z;
许多英特尔处理器都计算x * y,并将结果存储在80位寄存器中,然后删除结果并将结果切成64位。这可以获得更准确的计算结果,并且还可以避免指数溢出。结果可能与在64位计算机上计算的结果不同。因此,Java虚拟机的初始规格规定所有中间计算必须切断。这种行为与数值计算组相反。切割计算不仅可能导致溢出,也是因为削减操作需要时间,因此计算速度比精确的计算要慢。为此,Java编程语言确认最佳性能和理想结果之间的冲突并得到了改善。,虚拟机设计器允许中间计算结果采用扩展的准确性。但是,使用严格的浮动 - 点计算的方法对于使用StriltFP关键字标记的方法,必须使用来生成理想的结果。例如,您可以说
主要方法标记
公共静态strictfp void main(string [] args)
结果,主要方法中的所有指令都将使用严格的浮点计算。如果将类标记为严格FP,则必须使用严格的浮点来计算此类中的所有方法。
实际的计算方法将取决于英特尔处理器。默认情况下,中间结果允许使用扩展索引,但不允许使用扩展的尾巴(Intel Chip在切割尾巴时不会失去性能)。因此,这两个方法
区别在于,默认方法不会导致溢出,并且严格计算的使用可能会导致溢出。
是否不仔细阅读此评论都没关系。对于大多数程序,浮点溢出并不是一个大问题。在本书中,严格FPP关键字将不会使用。
当然,程序员知道添加1和减1是数值变量的最常见操作。在Java中,也使用了C和C ++的实现,并且也使用了自我提高和自我减少操作:N++添加了变量n的当前值;n-minus n 1的值。
例如:
n的价值将变为13。由于这些运算符会更改变量的值,因此其操作不能有价值。例如,4 ++是非法句子。
实际上,这两个运算符具有两种形式。以上是操作员操作中的“后缀”形式,并且还有一个“前缀”表单,++ n. n.的方法为1至变量值加1。但是在表达式中,这两种形式是不同的。前缀方法是通过添加1个操作执行的。后缀方法使用变量的原始值。
我们建议不要在其他表达式内使用++。以这种方式编写的代码很容易混淆,它会产生烦人的错误。
(当然,作为C ++语言名称的一部分,++计算符号也触发了有关编程语言的第一个笑话。改进后,我们可以使用它,因此应命名其名称++C。)
Java包含各种关系运算符。在他们的范围内,使用两个相等的数字==检测是否相等。例如,3 == 7的值是false。
使用!=检测不相等。例如,值为3!= 7是正确的。
此外,经常使用的操作还包含<(小于)、>(超过),<=(小于等于)和>=(大于相等)。
Java使用C ++习惯,使用&&表示逻辑“和”,||指示逻辑“或”。=操作员很容易看到!这意味着逻辑“ non - ”。&& and ||正在根据“简短循环”方法寻找值。如果第一个操作可以确定表达式的值,则不需要计算第二个操作号码。如果您使用&&计算两个表达式:
第一个表达值是错误的,结果是不正确的。因此,无需计算第二个表达式的值。此方法可以避免某些错误。例如,表达式:表达式:
当x为0时,将不会计算第二部分。因此,如果未计算x为0,1/x,则不会删除错误。
同样,对于表达式1 ||表达式2,当第一个表达式为真时,结果是自动true,无需计算第二部分。
最后,Java支持三元操作员?:。很多时候,此操作员非常有用。表达
返回到X和Y的较小值。
处理整数值时,可以执行整数值的组成的每个位。这意味着可以使用屏蔽技术来获取整数的每一点。投影算术包括:
&(and),|(OR),^(不同),?(不)
这些操作员在王位的位置工作。例如,如果n是整数变量,而由二进制代表的n的数量是从右边的第四位置为1,则
返回1;否则,返回0.通过使用2功率的功率,可以将2的功率与另一个位相屏蔽,只能保留其中一个。
注意:&和1操作用于布尔值,结果也是布尔值。这两个操作员与&& and ||的操作员非常相似,但不遵循“短-Circuit”方法。,在获得计算结果之前,请确保计算两个操作的值。
此外,“ >>”和“<<"运算符将二进制位进行右移或左移操作。当需要建立位模式屏蔽某些位时,使用这个运算符十分方便:
最后,>>>操作员将填充高水平;否 <<<运算符
警告:对移位运算符右侧的参数需要进行模32的运算(除非左边的操作数是long类型,
在这种情况下需对右侧操作数模64)。例如,1 << 35与1 << 3或8是相同的。
C++注释:在C或C++中无法确定 >> 操作执行是算术位移(扩展符号位)或逻辑位移(高级别0)。在执行中,它将选择较高的效率。也就是说,在C/C ++中,>>操作员实际上仅是由非阴性数字定义。Java消除了这种歧义。
在数学类中,它包含各种数学功能。在编写不同类型的程序时,可能需要的功能是不同的。
如果要计算有价值的平方根,则可以使用SQRT方法:
注意:println方法和sqrt方法之间存在很小的差异。println方法操作系统。在系统类中定义的对象。静态方法。有关静态方法的详细信息,请参阅第4章。
在Java中,没有功能函数,因此需要使用数学类的POW方法。陈述:
将y的值设置为x(x^a)。有两个双重类型参数,返回结果也为双重。
数学类提供了一些常用的三角函数:
也有索引函数及其反向函数 - 自然对和10个底部的数字:
最后,Java还提供了表示π和E常数的两个近似值:
提示:从JDK 5.0开始,您不必添加前缀“数学”。在数学方法名称和恒定名称的前面,但只要您在源中
作品的顶部与以下内容一起使用。
例如:
导入静态java.lang.math。*;
讨论第4章中的静态导入。
system.out.println(“π的平方根为”+sqrt(pi));
注意:在数学类中,为了实现最快的性能,所有方法都在计算机浮动 - 点单元中使用例程。如果完全可预测的结果比运行速度更重要,则应使用严格的速度类。“ FDLIBM)实现算法,以确保所有平台上的结果相同。对于这些算法的源代码,请参阅http://www.netlib.org/fdlibm/ index.html(fdlibm提供多个功能的一个功能,,《严格马斯类》将遵循IEEE 754版本。其名称将基于名称。“ E”启动)。
当程序运行时,一种值类型通常会转换为另一种。图3-1给出了值之间的合法转换。
图3-1中有6个实心箭头,表明没有信息丢失。有3个虚拟箭头,表明可能存在准确性损失的转换。将获得相同的尺寸,但它将失去一定的准确性。
当使用上述两个值进行双重操作时(例如N+F,N是整数,F是浮点数),首先将两个操作的数量转换为同一类型,然后进行计算。
在上一节中可以看出,必要时,INT类型的值将自动转换为双重类型。当然,可能会丢失一些信息。在这种情况下,需要通过强制性类型转换(cast)实现此操作。强制性类型转换的语法格式是给您要在支架中转换的目标类型,并按照以后要转换的变量名称。例如:
这样,变量nx的值为9。强制类型转换将浮点值通过切割的小数点转换为整数。
如果要放弃浮动点号的操作以获取最接近的整数(在许多情况下,您想使用此操作方法),则需要使用Math.Round方法:
现在,变量nx的值为10。当召唤圆形时,仍然需要强制性类型的转换。原因是圆形方法返回的结果是长类型。由于可能会丢失信息,只有强制性类型转换的使用才能将长型类型转换为INT类型。
警告:如果尝试将一个值从一种类型转换为另一种类型并超过目标类型的指数范围,则结果将被切为完全不同的值。例如,(字节)300的实际值为44。
C ++注意:请勿在布尔类型和任何数值类型之间转换强制性类型,这可以防止错误。只有一些情况需要将布尔类型转换为数值类型。我现在可以使用条件表达式B吗?1:0。
表3-4给出了操作员的优先级。如果您不使用括号,请计算给定的操作符号的优先级。相同的级别运算符是按从左到右计算的(除非表格中的右结合计算除外)。)例如,因为&&的优先级高于||的优先级
相当于
而且因为+=是正确的结合操作员,所以表达式
相当于
也就是说,将B+= C(加C)的结果添加到A。
C ++注意:与C或C ++不同,Java不使用逗号运算符。但是,您可以在for语句中使用逗号分隔的表达式列表。
有时该变量的价值仅在有限的集合中。或分别分别是S,M,L,X。但是以这种方式存在某种隐藏的危险。变量可能保留在变量中是错误的值(例如0或M)。
从JDK 5.0开始,可以针对这种情况定制这种情况。枚举类型包括有限的命名值。
例如,
现在,您可以声明这种变量:
尺寸类型变量只能存储此类型语句中给出的某个枚举值,或NULL值NULL表示该变量未设置任何值。
有关枚举类型的详细信息将在第5章中介绍。
原始:https://juejin.cn/post/7097158180576165902
