逻辑操作符
和C语言类似都为 与 或 非。
但Java中有长路和短路
长路与 和 短路与
长路:&
短路:&&
无论长路与还是短路与
两边的运算单元都是布尔值
都为真时,才为真
任意为假,就为假
区别
长路与 两侧,都会被运算
短路与 只要第一个是false,第二个就不进行运算了
长路或 和 短路或
长路:|
短路:||
无论长路或还是短路或
两边的运算单元都是布尔值
都为假时,才为假
任意为真,就为真
区别
长路或 两侧都会被运算
短路或 只要第一个是true的,第二个就不进行运算了
取反 !
取反 符号:!
真变为假
假变为真
都是布尔值,输出为true或者false
异或 ^
不同,返回真
相同,返回假
代码示例:
public class HelloWorld {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println(a^b); //不同返回真
System.out.println(a^!b); //相同返回假
}
}
位操作
这里的内容对于我们学物联网的是很重要的,在之前的C语言学习中也曾提到过位运算差别不大,指的这个差别是人为在纸上进行操作运算。但是代码不一样
首先就得引用这个方法 Integer.toBinaryString()
其作用就是它的中文意思 一个整数的二进制表达
代码示例:
public class HelloWorld {
public static void main(String[] args) {
int i = 5;
String b = (Integer.toBinaryString(i)); // 5的二进制的表达101
System.out.println(i+" 的二进制表达是: "+b);
}
}
操作进行:
不管是位或还是位与操作记住代码格式就行,掌握计算原理就可以在纸上进行运算。
public class HelloWorld {
public static void main(String[] args) {
int i =5;
int j = 6;
System.out.println(Integer.toBinaryString(i)); //5的二进制是101
System.out.println(Integer.toBinaryString(j)); //6的二进制是110
System.out.println(i|j); //所以 5|6 对每一位进行或运算,得到 111->7
}
}
至于异或和取非的操作也是按本来操作符的定义来的
1、
左移:根据一个整数的二进制表达,将其每一位都向左移动,最右边一位补0
右移:根据一个整数的二进制表达,将其每一位都向右移动
2、
带符号右移 >>
对于正数, 带符号右移 >> 会把所有的位右移,并在最前面补0
对于负数, 带符号右移 >> 会把所有的位右移,并在最前面补1
无符号右移>>>
如果是一个负数,那么对应的二进制的第一位是1
无符号右移>>>会把第一位的1也向右移动,导致移动后,第一位变成0
这样就会使得负数在无符号右移后,得到一个正数
简单的说:
带符号右移 >> 移动后正的还是正的,负的还是负的,符号不变
无符号右移>>>移动后,变正的了
对于赋值操作符
记住:赋值操作的操作顺序是从右到左
int i = 5+5;
赋值操作
=
+=
-=
*=
/=
%=
&=
|=
^=
<<=
…
三元操作符
和C语言中的条件语句的另一种形式类似:
表达式?值1:值2
如果表达式为真 返回值1
如果表达式为假 返回值2