java的运算符分为:
- 算术运算符
- 关系运算符
- 位运算符
- 逻辑运算符
- 赋值运算符
- 三元运算符
一、算数运算符
运算符 | 含义 | 例子 |
---|---|---|
+ | 求和 | A=10,b=10 A+B=20 |
- | 相减 | A-B=0 |
* | 相乘 | A*B=100 |
/ | 相除 | A/B=1 |
% | 求模(求余数) | A%B=0 |
++ | 自加一 | B++或++B等于11 |
-- | 自减一 | B--或--B等于9 |
(1)++运算符
当++在变量前
当++在变量前,会先自加一,在做赋值运算
int x=100;
System.out.println(++x);//则输出x为101
当++在变量后
当++在变量后,会先做赋值运算,然后加一
int x=100;
System.out.println(x++);//则输出x为100
System.out.println(x);//则输出x为101
(2)--运算符
当--在变量前
当--出现在变量前,会先自减一,在做赋值运算
int x=100;
System.out.println(--x);//则输出x为99
当--在变量后
当--出现在变量后,会先做赋值运算,在自减一
int x=100;
System.out.println(x--);//则输出x为100
System.out.println(x);//输出x为99
总结:
前缀自增自减(++a,--a):先进行自增或自减运算,在进行表达式运算
后缀自增自减(a++,a--):先进行表达式运算,在进行自增或自减运算
二、关系运算符
关系运算发所有值都是布尔型的不是true就是false,不会是其它值
运算符 | 含义 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
在学习位运算符前想了解一下原码、反码、补码
原码:是最简单的机器数表示法。用最高位表示符号位,‘1’表示负号,‘0’表示正号。其他位存放该数的二进制的绝对值。
反码:如果是正数,则表示方法和原码一样,如果是负数,符号位不变,其余各位取反,则得到这个数字的反码表示形式。
补码:如果是正数,则表示方法和原码一样,如果是负数,则将数字的反码加上1(相当于将原码数值位取反然后在最低位加1)
三、位运算符
操作符 | 描述 |
---|---|
&-----按位与 | 如果对应位置都为1则结果为1,否则为0 |
| ------按位或 | 如果相应位置都是0,则结果为0,否则为1 |
^ -----按位异或 | 如果对应位置相同则结果为0,否则为1 |
~ -----取反 | 将0变1,1变为0 |
<< ----左移 | 左操作数按位左移右操作数指定位数 |
>> ----右移 | 左操作数按位右移右操作数指定位数 |
>>>---无符号右移 | 左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充 |
int A=10;//10的二进制数为 00001010
int B=127;//127的二进制数为01111111
一、按位与(&)
概念:两操作数同为1结果才为1其余为0
例如:(A&B)
A= 0 0 0 0 1 0 1 0
& ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
b= 0 1 1 1 1 1 1 1
———————————
0 0 0 0 1 0 1 0
二、按位或(|)
概念:如果相应位置都是0,则结果为0,否则为1
例如:(A|B)
A= 0 0 0 0 1 0 1 0
| ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
b= 0 1 1 1 1 1 1 1
———————————
0 1 1 1 1 1 1 1
三、按位异或(^)
概念:如果对应位置相同则结果为0,否则为1
例如:(A^B)
A= 0 0 0 0 1 0 1 0
^ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
b= 0 1 1 1 1 1 1 1
———————————
0 1 1 1 0 1 0 1
四、取反(~)
概念:将对应位0变1,1变为0
例如:(~A)
~A= 0 0 0 0 1 0 1 0
~
___________________
1 1 1 1 0 1 0 1
上面是内存中的保存的形式,我们在读取十进制是根据原码来读取的,而在内存中,数值都是以二进制补码形式存储的,正如上面所说,正数的补码和原码一样,负数的补码得到过程:原码 转 反码 再转 补码。
负数的补码是符号位不变,其余的取反 得到反码,然后在反码的基础上+1
因为二进制在内存中都是已补码形式存储的 ,正数的补码和原码一样,负数的补码是符号位不变,其余的取反 得到反码,然后在反码的基础上+1。
原码 1 1 1 1 0 1 0 1
反码 1 0 0 0 1 0 1 0
补码 1 0 0 0 1 0 1 1
其结果为:10001011=-11(最前面的表示为符号位,1为负数,0为正数,1011=11)
五、左位移(<<)
按二进制形式把所有的数字向左移动对应的位数,高位移除低位的空位补零。
例如:A<<2
A<<2:
A 的原码:0 0 0 0 1 0 1 0
<<2: 0 0 1 0 1 0 0 0
结果为:40
在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
六、右位移(>>)
概念:按二进制形式把所有的数字向右移动对应的位数,低位移出舍弃,高位的空位补
符号位,及正数补零,负数补1.
例如:int C=-7;
-7的原码:1 0 0 0 0 1 1 1
反码: 1 1 1 1 1 0 0 0
补码: 1 1 1 1 1 0 0 1
右移两位:1 1 1 1 1 1 1 0
反码: 1 0 0 0 0 0 0 1
补码: 1 0 0 0 0 0 1 0
结果:-2
右移一位相当于除2,右移n位相当于除以2的n次方
四、逻辑运算符
运算符 | 含义 | 结果 |
---|---|---|
& | 逻辑与 | 两边都为true,结果才为true |
| | 逻辑或 | 有一边为true,结果为true |
! | 逻辑非 | !true=false |
&& | 短路与 | 都为true,则为true,有一个为false便不在判断了 |
|| | 短路或 | 都为false则为false。有一个为true便不在继续判断 |
^ | 异或 | 相同则为false不同则为true |
" | "和 "|| "
int a=10;
int b=2;
//短路或(||)都为false则为false,有一个true便不在继续判断
//一个成立后面就不在判断了
boolean d=a>0||(b++)>2;
System.out.println(b);//b的值为2,因为a>0是为true所以后面的值不会在执行
//逻辑或(|)所有的都运行
boolean de=a>0|(b++)>2;
System.out.println(b);//b的值为2,因为逻辑或是不管前面的判断是否是对还是错都要往后判断
" && " 和 " & "
int a=10;
int b=2;
//短路与(&&)一个为false后面的不运行了
boolean as=a>12&&(b++)<3;
System.out.println(b);//b的值为2,因为a<12结果为false所以不会在执行了
//逻辑与(&),执行所有语句
boolean s=a>12&(b++)<3;
System.out.println(b);//b的值为3因为即使前面为false也要往后面执行
" ^ "
int a=10;
int b=2;
boolean as=b>10;//false
boolean as1=a==10;//true
boolean as2=as^as1;//相同为false,不同的为true所以结果为:你猜
" ! "
boolean a=true;
boolean b=false;
System.out.println(!a);//结果为false
System.out.println(!b);//结果为true;
五、赋值运算符
运算符 | 运算 | 例子 |
---|---|---|
= | 赋值---见右边的值赋给左边的变量 | a=5 ~>a=5 |
+= | 加等于 | a=3,b=4 a+=b ~>a=7,b=4 |
-= | 减等于 | a=3,b=4 a-=b ~>a=-1,b=4 |
*= | 乘等于 | a=3,b=4 a*=b~>a=12 |
/= | 除等于 | a=3,b=4 a/=b ~>a=0 |
%= | 模等于 | a=3,b=4 a%=b ~>a=3 |
六、三元运算符
三元运算符又称三目运算符。
格式:(关系表达式)?表达式1:表达式2;
如果表达式成立,则运行 表达式1,反之,运行表达式2
if后的代码块可以有多个语句,但三目运算符是不支持多个语句的