Java数学函数与常量

计算浮点数

在Java中运算浮点数的时候需要注意,如果一个需要存储的值与计算机的寄存器位数不符时,比如需要计算long型,但是寄存器有80位,而且一个计算需要进行多步运算,需要将中间结果保存在寄存器中,那么会出现两种情况,一种是直接将计算结果截取64位进行保存,一种是直接进行80位的保存,在计算完毕之后进行64位的截取,当然,在第一种情况下会出现精度不够准确的问题,计算机在默认情况下会进行扩展精度计算,而在使用关键字strictfp之后采用严格的浮点计算,也就是截断计算。

数学函数

在Java中Math类中有很多的数学函数,比如平方根或者三角函数等,有一个比较关键的函数:
floorMod函数,在Java中,一个正整数对2取余的结果是0或者1,但是一个负数对2取余的结果是0或者-1,在数学中,负数对2取余的结果应该和正数一致,但是在虚拟机的计算中不是,这是由于设计虚拟机的人在设计的时候并没有参考数学中的计算方式,而是利用钟表求时间的方式进行计算的,所以在Java中,为了解决这一问题,引入了floorMod函数,此函数对于求余的计算和数学中保持一致,

public static strictfp void main(String[] args) {
		System.out.println(-3%2);
		System.out.println(Math.floorMod(-3, 2));
	}

执行结果
在Java中,其实还存在一个类可以进行数学计算,就是StrictMath类,此类是和Math进行互相调用。

数值类型之间的转换

在这里插入图片描述图中实现连接的类型可以直接进行转换,并且无信息丢失。虚线表示可以强制转换,但是有精度的丢失。除了这两种转换外,其他的转换直接会改变原来的数据,比如(byte)300表示44,这是因为byte是一个字节,而int是4个字节,直接会截取前半部分的一个字节当做一个byte数值。

在Java中,会出现在计算中类型的错误,比如:

		int a=0;
		a=a+2.1;//这样的写法会报错,因为a是int类型,加上一个double类型会转换为double,并不会自动转换为int,需要强转
		a+=2.1;

在上述代码中,第二行代码是错误的写法,但是第三行是正确的,因为在这种二元运算中,会出现强转,等价于a=(int)(a+2.1);。

逻辑运算

在Java中逻辑运算符&&、||、&、|。这四种都可进行逻辑运算,但是有区别的是,&&和||进行的是短路运算,而&和|则不会短路。

位运算

Java中的位运算包括<<、>>、>>>。前两种是向左移位和右移位,而>>>也是向右移位,它和>>的区别是>>>是会用0进行填充最高位,而>>会用符号位填充高位。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值