java中有一套全面 的运算符来操纵变量。
算术运算符(+,-,*,/)
赋值运算符(+= , -=, *=,/=,!=,>>=,<<=,%=)
位运算符(>> , << , >>>,~)
逻辑运算符(&,&&,|,||,!)
条件运算符 三目运算符(y= a>b ? a:b)
在这里 一目运算符:++,--,~,!,-
算术运算符(+-*/)
算数运算符只进行简单的加减乘除,但是+号有很多作用,其一为连接字符串,其二为做加法运算
其三为连接 字符串与变量。
其余的-号也有两种 用法 其一为减法,其二表示负号,他的作用跟数学运算符一样。
除法运算,如果做除法的两个数都为整数 则相除的结果就是"商",如果其中一个为小数则相除的结果就是小数
++ ,--
++为自加一 --则为自减一
a++ 为 先运算再+ ++a 先加再执行。
a--,--a 同理
- (负号)是 一目运算符,可以给值一个负数
总结:算数运算符的作用,和在数学中的作用相似。(+号多一个应用。除法法则有点区别)
赋值运算符
赋值运算符中 是算数运算和位运算 与等号 的合并,
例:
a+=b <==> a=a+b 左边的值等于左右值相加
a-=b <==> a =a-b 左边值等于左右两值相减
a*=b<==>a=a*b 左边值等于左右两边值相乘
a/=b<==>a=a/b左边值等于左右边值相除
a%=b <==>a=a%b 左边值等于左右两边相除取的余数
a<<=b <==>a=a<<b; 左边值等于a向右移动b位 的值等于a
a>>=b <==>a=a>>b; 左边值等于a向左移动 b位 后 的值等于a
a^=b <==>a=a^b
a&=b <==>a=a&b
a|=b <==>a=a|b
总结 :这样写更简练,也很体现JAVA的强劲。
这样写左边的值等于两值进行对应法则运算后的值
位运算
位运算的符号: >>,<<,>>>;
>> 表示由左向右移动某个位数;
<< 表示由右向左移动
>>> 表示无视符号由右向左移动
~ 表示逐位取反,
其中数在做运算的时候要变成二进制再进行位的移动;
">>>"比较特殊他的作用是直接移动位数 不改变符号 其余的跟“>>”计算相似,但是最高位,
位 "&"或 位“|”于 位“^” 如果一个数进行计算必须转换为 二进制再进两数二进制的计算。
两数一般从左到右两两相对。
&: 所对的数 只有1&1=1 0&1= 0; (只有 1&1=1,其余的都是 0)
|: 只有 1|0= 1 1|1=1 其余的 都是 0;(也就是说只有一个数为1他就是1,只要都是0 才是 0)
^: 1&1=1 0&0=1 1&0=0(两个数相同为 1 不相同为0)
例1;
int a=125,b=0;
b=a>>2;
System .out.println(b);
输出结果位 31;
解释:因为位运算进行时要把该运算的数进行二进制转换再进行移动
比如 a=125 二进制 为 0111 1101
输出结果为31 的二进制为 0001 1111
125-->31 在二进制中从左向右移动了2位
例2;
int a=-125,b=0;
b=a>>2;
System.out.println(b);
解释:输出结果为1073741792。
125的二进制 0111 1101;
因为这是int类型有32位-125二进制为 1111 1111 1111 1111 1111 1000 0011 补码(是源码的相反数再+1);
整体右移动的位数还无视符号所以 -125移动后为 0011 1111 1111 1111 1111 1111 1110 0000
结果与输出结果相同
例3;
public static void main(String[] args){
System.out.priintln(5&3);
System .out .println(5|3);
System .out .println(5^3);
}
输出结果为:1,7,6
解释: 5的二进制为:0101
3的二进制为 0011
根据法则 0&0=0,1&0=0,0&1=0 1&1=1;结果就是 0001=1
第二个 0|0=0 1|0 = 1 0|1 = 1 1|1=1 结果为 0111=7
第三个 0|0=0 ; 1|0=1 0|1=1 1|1=0 结果为 0110 =6
逻辑运算
! 单目运算符
&,&& 双目运算符‘
| ,||, 双目运算符
^异或 双目运算符
| (逻辑或),||(短路或)
其中一个为真则是真 (真值判断相同)
区别 :第一个数如果为TRUE 则 | 会继续运行 ||不会继续运行。
例:
public static void main(String[] args) {
int a=10;
int b=5;
if (a>0||(b++)>5){//因为 |只运行第一个数如果为真则直接输出。
System.out.println(b);
}
if(a>0|(b++)>5){//因为 |都运行 所以()里都运行再输出b
System.out.println(b);
}
}
}
结果为 5 6
&(逻辑与)&&(短路与)
两个都为真则是真 ,只要有一个假就是假 如果有一个是假的就是假的
区别 :a&b 左边的不管真假 右边都需要算
a&&b 左边为假 右边不需要算 if a=false b就不需要计算
例2;
public static void main(String[] args) {
int a=10;
int b=5;
if (a>20&&(b++)<6){//因为 |只运行第一个数如果为真则直接输出。
System.out.println(b);
}
if(a>20&(b++)<6){//因为 |都运行 所以()里都运行再输出b
System.out.println(b);
}
}
}
结果是 4 5
解释:再第一个if语句中 a=10 a>20为 false 则判断第二个条件(b++)<6因为b++先进行运算再++又因为&&判断 为true 就直接运行 if 后的 语句 不进行计算 所以就直接输出b的值
注意:一定要熟记运算规则。
^异或
两个值不同则为真 ,两个值相同则是假。
!(取反)
单目运算符 只计算单个数值的相反数。如果是false 他就等于 true。
条件运算符
y=a>b ? a:b;
如果a>b 为真 则是a的值
如果a>b为假 则是b的值
最后赋值给y
?后的值是选择输出值,输出的值是数字也可以是字符串“”