继续上一篇,接着来说说java的运算符;之前列举了java十种常用的运算符,身边的一位大神问是我自己列出来的么?我说不是。。。他说他也觉得,我哪有那么无聊!!说这个事儿,是想说,这些知识重要也不重要,一定要知道,但不一定要100%一点儿不差的记住,除非记忆力惊人另说;常用的一定要熟悉,就ok。好了,说正事儿
上一篇说完了关系运算符,来说说逻辑运算符;
为什么那么多运算符不说,单独说这个逻辑运算符呢?因为逻辑运算符一般都是与关系运算符结合起来用的。
逻辑运算符,一共有三个:和,或,非,异或,符号,却有6个,先来看看这些符号:&, |, !, ^(shifit +键盘上面那个一行的6), &&, ||
前四个可以对应上,那后两个死怎么回事儿?双和,双或?
可不是这么累加的, 这个问题我们先放着,先来说说这几个运算符;
和,就是and,可以理解为并且,比如:a >0 & a < 10;就是说,a要同时满足两个条件,这个同时,就是我们的运算符了;
或,就是or,可以理解为或者,比如: a > 0 | a <0 ; 就是说,a大于零或者小于零,当然,这个仅仅是例子,没任何意义的。
非,就是not,可以理解为不是,比如 !(a >0);就是说不是a大于零,,那就是a小于零了
先理解理解,我来上段代码,给大家瞧瞧
public class LogicOperators{
public static void main(String[] args){
int var1 = 10;
int var2 = 3;
int var3 = 5;
System.out.println("var1大于var2,并且var1大于var3么?" + ((var1 > var2) & (var1 > var3)));
System.out.println("var1大于var2,并且var1大于var3么?" + ((var1 > var2) && (var1 > var3)));
System.out.println("var1大于var2或者var1大于var3么?" + ((var1 > var2) | (var1 > var3)));
System.out.println("var1大于var2或者var1大于var3么?" + ((var1 > var2) || (var1 > var3)));
System.out.println("var1不大于var2么" + !(var1 > var2));
}
}
,废话少说,直接看结果了

在你编写程序的时候,是否有想到过&和&&的结果是一样,|和||的结果是一样的呢?
public class BitOperators{
public static void main(String[] args){
int var1 = 129;
int var2 = 128;
System.out.println("var1与var2的结果是" + (var1&var2));
}
}
按照刚才说的,先转成二进制,129二进制是10000001,128二进制是10000000, 对照下计算规则,我们得到了10000000,啊哦,恰好是128,那么我们打印出来的结果是不是128呢?
bingo,就是128,你算对了没?
public class BitOperators{
public static void main(String[] args){
int var1 = 2;
System.out.println("非var1的结果是" + (~var1));
}
}
结果毋庸置疑,-3
4,异或运算符,符号^
public class BitOperators{
public static void main(String[] args){
int var1 = 15;
int var2 = 2;
System.out.println("15异或运算2结果是" + (var1^var2));
}
}
提醒下,15的二进制是1111,2的二进制是0010,算算。。
public class BitMoveOperators{
public static void main(String[] args){
int var1 = 2;
int var2 = 2;
System.out.println("var1 << var2 结果是" + (var1 << var2));
}
}
先来分析一下,2的二进制,经常提到0010,向左移动两位那么应该是1000,算下十进制,就是8,看2是什么关系,别说是4倍。除了这个呢?没错,2的3次方,推理下,2向左移动两位结果是2的3次方,貌似是2乘以2的2次方嘛!是的,其实向左移动两位,就是乘以2的2次方,
ok,和我算的一样!
public class AssOperators{
public static void main(String[] args){
int var1 = 5;
int var2 = 2;
System.out.println("var1 += var2 的值是: " + (var1+=var2));
System.out.println("var1 -= var2 的值是: " + (var1-=var2));
System.out.println("var1 *= var2 的值是: " + (var1*=var2));
System.out.println("var1 /= var2 的值是: " + (var1/=var2));
System.out.println("var1 %= var2 的值是: " + (var1%=var2));
System.out.println("var1 >>= var2 的值是: " + (var1>>=var2));
}
}
结果如下:
public class AssOperators{
public static void main(String[] args){
int var1 = 5;
int var2 = 2;
System.out.println("三元运算符的运算结果是: " + ( var1 > var2 ? "对咯!" : "错咯!" ));
}
}
猜猜var1大于var2是对了还是错了?
现在知道三元运算符怎么用了吧,其实还是挺简单的
public class ConvOperators{
public static void main(String[] args){
double varDouble = 20.51;
int varInt = (int)varDouble;
System.out.println("varInt的值是: " + varInt);
}
}
我们要打印的是int型,会不会四舍五入了?看看结果就知道了
没有,转型的时候是丢失精度!!记住,是丢失