2021-03-10 运算符

2021-03-10

Day 4, 学习运算符Operators

Operators一览

运算符包含简单的加减乘除,还有其他逻辑运算。我们称被运算的值,比如1+2的1和2为运算对象operand,Java有着以下的运算符

OperatorsPrecedence ↑
postfixexpr++ expr--
unary++expr --expr +expr -expr ~ !
multiplicative* / %
additive+ -
shift<< >> >>>
relational< > <= >= instanceof
equality== !=
bitwise AND&
bitwise exlusive OR^
bitwise inclusive OR|
logical AND&&
logical OR||
ternary? :
assignment= += -= *= /= %= &= ^= |= <<= >>= >>>=

#表格位置越高的运算符有着越高的优先级


赋值运算符 =

最常用的运算符应该就是=了,赋值运算符将右边的值赋给左边的operand或创建类的对象

 int cadence = 0;
 int speed = 0;
 Point originOne = new Point(23, 94);

算数运算符 + - * / %

即加+-*/ 和求余运算符%,和数学意义上的运算符一样。以下为不同点

  • 加法运算符也可用于连接字符串concatenation
  • 求余运算符将求两个数字相除后所得的余数

与python不同,乘法运算符不能作用在字符串上。


复合赋值

可以将赋值运算符和算数运算符结合来创造复合赋值运算符

比如x = x + 1x += 1的效果都是将x的值加一


单元运算符

单元运算符Unary Operator只需要一个值即可完成运算

OperatorsDescription
+单元加法符,指定正数(虽然不需要也是正数)
-单元减法符, 否定negate一个表达式
++增量运算符,将值加1
- -减量运算符,将值减一
逻辑算符Logical complement operator,将布尔值颠倒

用法如下

int number = +1 //-1
number--		//0
number++		//1
number = -number // -1
boolean correct = true
System.out.println(!correct) //false

注意,增量/减量运算符可以放在前或后如--numbernumber-- ,并且有区别:

number = 1
System.out.println(number--) //将打印出1
System.out.println(number) //将打印出0
System.out.println(--number) //将打印出-1
System.out.println(number) //将打印出-1

将运算符放在前面如--number ++number 会运算出赋值的值,而放在后面number-- number++会算出赋值的值。

不过不论将运算符放在前或后,都会将值加或减,唯一的区别便是算式本身可算出evaluate的值。


关系操作符

关系操作符判断一个值比另一个值是大,小还是相等

OperatorsDescription
==相等
!=不等
>大于
>=大于或等于
<小于
>=小于或等于

没什么特殊的,不多讲


条件运算符

用于布尔值运算,&&||

&& 类似物理的或门,当两个布尔值均为true时为true
|| 类似物理的与门,两个布尔值其中一个为true便为true

还有一个三元条件运算符?,可以记为简短的if-then-else结构。

class Conditional {
    public static void main(String[] args){
        int value1 = 1;
        int value2 = 2;
        int result;
        boolean someCondition = true;
        result = someCondition ? value1 : value2;

        System.out.println(result);
    }
}

在以上代码内,?所起到的作用大概是:

“如果someCondition”是true,把value1的值赋给result, 如果不是就将value2的值赋给result"


类型比较符 instanceof

用于判断某个对象是否为某个类的实例,也可用于判断某个对象是否为完成了接口的类的实例

class InstanceofDemo {
    public static void main(String[] args) {

        Parent obj1 = new Parent();
        Parent obj2 = new Child();

        System.out.println("obj1 instanceof Parent: "
            + (obj1 instanceof Parent));
        System.out.println("obj1 instanceof Child: "
            + (obj1 instanceof Child));
        System.out.println("obj1 instanceof MyInterface: "
            + (obj1 instanceof MyInterface));
        System.out.println("obj2 instanceof Parent: "
            + (obj2 instanceof Parent));
        System.out.println("obj2 instanceof Child: "
            + (obj2 instanceof Child));
        System.out.println("obj2 instanceof MyInterface: "
            + (obj2 instanceof MyInterface));
    }
}
class Parent {}
class Child extends Parent implements MyInterface {}
interface MyInterface {}

在以上代码,我们定义了

  • 一个Parent
  • 一个简单的MyInterface接口
  • 一个继承了Parent并且完成了接口MyInterfaceChild

运行后的结果为:

obj1 instanceof Parent: true
obj1 instanceof Child: false
obj1 instanceof MyInterface: false
obj2 instanceof Parent: true
obj2 instanceof Child: true
obj2 instanceof MyInterface: true

位运算符

位运算符bitwsie operator和位移运算符bit shift operator使用的是二进制的计算方法


& 与

& 为与门,运算时两个二进制操作数的对应位需都为1,结果位为1

18 & 21 的运算结果为16,方法如下

182116
111
000
010
100
010

| 或

| 为或门,运算时两个二进制操作数的对应位其中一个为1,结果位为1

18 | 21 的运算结果为23,方法如下

182123
111
000
011
101
011

~ 非

~ 为非,将一个数字取反,把0变成1,1变成0。得到取反后的二进制值后计算反码的补码,此处涉及到了原码,反码和补码的概念,下篇会具体讲,暂时搁置


^ 异或

^可以看作异或门,当两个二进制操作数对应值相同则为0,不相同则为1

18 ^ 21 的运算结果为7,方法如下

18217
110
000
011
101
011

<< 左移运算符

<<将会把数字按照二进制形式往左移对应的位数,高位的将一处,低位补上0

假设我的电脑支持一字节的数字,则18<<2会运算出72

1872
00
01
00
10
01
00
10
00

>> 右移运算符

>>将会把数字按照二进制形式往右移对应的位数,低位的移除,高位补上0,负数高位补1 (具体见后续文章

假设我的电脑支持一字节的数字,则18>>2会运算出4

184
00
00
00
10
00
01
10
00

Reference
Java Tutorial
计算机补码,反码,原码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值