Java中的基本运算符(1)

运算符应该是一门语言最基本的知识之一,所以整理梳理一下,有助于形成良好的编程习惯和规范。

1. 算术运算符

+,-,*,/分别对应了数学上的加减乘除,和绝大多数语言是一样的,稍微需要注意的是,除法中,如果两个参与运算的数都是整数,则表示整数除法,例如5/3结果是1,如果有一个是浮点数,则结果就是浮点数,即使6.0/3,结果也是浮点数2.0,而不是整数2。此外,0 不能作为除数,否则抛出异常:

    public static void main(String[] args)
    {
        System.out.println(5/3);
        System.out.println(6.0/3);
        System.out.println(5/0);
    }

结果如下:

另外一个就是求余数,使用%表示,例如5%3,其结果就是2,两个正整数的求余,结果是很直观明了的,不过当参与求余运算的数是负数,甚至是0时,其结果如何呢?预测一下下面这几个问题:

  • 12%5
  • 12%(-5)
  • (-12)%(5)
  • (-12)%(-5)
  • 12%0
  • -12%0
  • 0%5
  • 0%(-5)

好了,先给出答案:

前面四个结果分别是2,2,-2,-2;

第5/6会抛出异常,其性质和除0一样;

最后两个的结果是0。

发现规律了吗? 余数总是和被除数的符号相同

这个地方其实和数学家的惯例是不同的,在数学上,通常使用的是欧几里得规则:余数非负。但是计算机体系架构的设计者们估计没有咨询数学专业的人士(实现欧几里得规则的电路并不复杂),于是就有了这么个历史遗漏问题。不过,由于是人为制定的规则,那就可以有work around了,那就是Math包中的floorMod函数,它能够保证余数总是与除数的符号相同

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

2. 自增和自减运算

Java在这一部分的设计上,借鉴了C和C++的方式,在不需要传递值出去的时候,两者效果相当,但是需要传递值时,前增是先自增,再将结果传递出去,而后增则是先将值传递出去,然后再自增,对于自减也是一样的。

需要指出的是,不要在代码中搞出一些莫名其妙的语法,有些是语法错误的,有些是容易造成错误理解的,例如,++x++;这种会在编译时报错,x=++x; 或者x+=x++;这些坑爹的写法,连炫技都算不上,纯粹的害人害己。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值