1-5 运算符

算数运算符

操作符

描述

示例

+

加法 - 相加运算符两侧的值

-

减法 - 左边 减去 右边

*

乘法 - 相乘操作符两侧的值

/

除法 - 左边值 除以 右边

10/3=3

%

取模 - 左边数 除以 右边 所得的余数

10%3=1

++

自增: 操作数的值增加1

a++; ++a

--

自减: 操作数的值减少1

a--; --a

a++ 与 ++a 的区别

a++:变量a先参与程序的执行,然后变量a自加1

++a:变量a自加1,再参与程序的执行

int a = 12;

int b = a++;

System.out.println(b);

System.out.println(a);

控制台打印结果:

12

13

逻辑运算符

操作符

描述

示例

&&

逻辑与运算符。当且仅当两边表达式都为真,条件才为真。

true && false = false

||

逻辑或操作符。两边任何一个为真,条件为真。

true || false = true

逻辑非运算符。

!true = false

短路运算

表达式1 && 表达式2  如果表达式1为false,根据&&的规则,已经可以判断出整个表达式的结果,就不会继续判断表达式2;

表达式1 || 表达式2  如果表达式1为true,根据||的规则,已经可以判断出整个表达式的结果,就不会继续判断表达式2

比较运算符

操作符

描述

示例

>

大于

<

小于

>=

大于等于

<=

小于等于

==

等于,判断两个变量的值是否相等

!=

不等于

赋值运算符

操作符

描述

示例

+=

加等于

a += 1 等价于 a = a + 1

-=

减等于

*=

乘等于

/=

等于

%=

取模等于

a %= 3 等价于 a = a % 3

=

等于

a = 1

运算符

在讲位运算之前,需要先了解二进制计算:

1 十进制转二进制

 

2 二进制转十进制

计算规则:

  1. 二进制数从右向左计算
  2. 每一位的值乘以2的(二进制位数-1)次方
  3. 所有的结果相加,即为十进制数

示例:1010转为十进制

0*20=0

1*21=2

0*22=0

1*23=8

8+0+2+0=10

所以 1010转换为十进制为10

3 正负数怎么样二进制表示

二进制原码反码补码转换

正数

符号位=0

如:0000 0000 1001 = 9

高位全部补0(红色部分)

原码=反码=补码

负数

符号位=1

如: 1111 1111 1001 = -9

高位全部补1

反码=符号位不变,原码取反

补码=反码+1

注意,不管是正数还是负数,在计算机中全部存储的是补码。

正数,如数字9对应的二进制原码是1001,左边的位称为符号位(也叫高位),正数的符号位全部补0;

如果是8位二进制,则9 = 0000 1001

如果是16位二进制,则 9 = 0000 0000 0000 1001

负数,如数字-9对应的二进制原码1111 1001,高位是符号位全部补1;

如果是8位二进制,则-9 = 1111 1001

如果是16位二进制,则-9 = 1111 1111 1111 1001

4 位运算符

操作符

描述

示例

&

与,如果对应位都是1,则结果为1,否则为0

2&3 = 0010 & 0011 = 0010

|

或,如果对应位都是0,则结果为0,否则为1

2|3 = 0010 | 0011 = 0011

^

异或,如果对应位的值相同,则结果为0,否则为1

2^3 = 0010 ^ 0011 = 0001

~

非,按位取反运算符,二进制补码按位取反包括符号位,即0变成1,1变成0

~60 = -61

<<

按位左移运算符,符号位不变二进制补码按位左移,低位补0

6 << 2 = 24

>>

按位右移运算符,符号位不变二进制补码按位右移,低位舍弃

6 >> 2 = 1

>>>

按位无符号右移,低位舍弃,高位补0

60 >>> 2 = 15

示例

~ 非运算:二进制补码按位取反

2

原码 0 10

反码 0 10

补码 0 10

取反

补码 1 01

反码 1 00

原码 1 11

所以 ~2=-3

-2

原码 1 10

反码 1 01

补码 1 10

取反

补码 0 01

反码 0 01

原码 0 01

所以 ~-2=1

<<左移运算符

按位左移运算符,符号位不变二进制补码按位左移,低位补0

9<<2

原码 0 1001

反码 0 1001

补码 0 1001

左移2位

补码 0 0010 0100

反码 0 0010 0100

原码 0 0010 0100

所以 9<<2=36

-9<<2

原码 1 1001

反码 1 0110

补码 1 0111

左移2位

补码 1 01 1100

反码 1 01 1011

原码 1 10 0100

所以 -9<<2=-36

>>右移运算符

按位右移运算符,符号位不变二进制补码按位右移,低位舍弃

  1. >2

原码 0 1001

反码 0 1001

补码 0 1001

右移2位

补码 0 0010

反码 0 0010

原码 0 0010

所以 9>>2=2

-9>>2

原码 1 1001

反码 1 0110

补码 1 0111

右移2位(负数高位全部是1所以实际上是 1111 0111右移2位

补码 1 01

反码 1 00

原码 1 11

所以-9>>2=-3

>>>

按位无符号右移,低位舍弃,高位补0

-5>>>2

原码 1000 0101

反码 1111 1010

补码 1111 1011

0011 1110

无符号右移2位,高位补0

补码 0011 1110

反码 0011 1110

原码 0011 1110

-5>>>2=32+16+8+4+2=62

-9>>>2

原码 1000 1001

反码 1111 0110

补码 1111 0111

无符号右移2位,高位补0

补码 0011 1101 此时高位为0,表示正数

反码 0011 1101

原码 0011 1101

三元运算符 ?:

条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符主要是决定哪个值应该赋值给变量。

(expression) ? value if true : value if false

示例:

int a = 1;

int b = 2;

String c = (a > b) ? "yes" : "no";

运算符优先级

运算符有优先级,如果不确定运算符的优先级,可以使用小括号将需要计算代码括起来

运算符优先级,从左到右越来越低:

() ++ -- ! 

~  instanceof  * / % + - 

<<  >>  >>>  

<  >  <=  >=  ==  !=

&  ^  &&  ||  ?:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值