目录
一、位运算符
位运算符主要是利用到了比特位,也就是二进制位,只有0和1,而它们的位运算符主要有以下四类:
1、按位与&
按位与就是俩个二进制位都是1,则结果为1,否则结果为0,以图为例子:
我们可以发现,俩个二进制数按位与,俩个为1结果为1,我们发现结果也是八十五的二进制;
public class WeiYunSuan {
public static void main(String[] args) {
byte a=85;
byte b=125;
System.out.println(a&b);
}
}
输出结果为:
2、按位或|
同理,按位或|则是俩个都为1,结果则为0;因为我们在前一篇运算符||也讲过这个类似的,所以直接上代码:
public class WeiYunSuan {
public static void main(String[] args) {
byte a=85;
//01010101
byte b=125;
//01111101
System.out.println(a|b);
//01111101
}
}
运行结果为:
换算成二进制则是01111101,符合预期。
3、按位取反~
按位取反是直接讲原先的二进制0和1变成1和0,以代码为例。
public class WeiYunSuan {
public static void main(String[] args) {
byte a=85;
//01010101
System.out.println(~a);
//10101010
}
}
运算结果如下 :
由于byte是有符号的数,所以第一位是符号位,而第一位为1的话,那么这个数是一个负数,补码10101010的原码是11010110,也就是-86。
4、按位异或
按位异或的原理就是相同为0,相异为1,以刚才的代码为例子:
public class WeiYunSuan {
public static void main(String[] args) {
byte a=85;
//01010101
byte b=125;
//01111101
System.out.println(a^b);
//00101000
}
}
运行结果如下:
二、移位运算
移位运算主要是要了解它们的原理和一些用途。
1、左移<<
右移操作也就是最左侧位不要了,最右侧补0。
public class WeiYunSuan {
public static void main(String[] args) {
byte a=85;
//01010101
System.out.println(a<<1);
//10101010
}
}
运算结果是:
一个有符号位的数如果通过左移将第一位变为1的话,那么此时这个数变成了无符号数。所以结果变成170;
2、右移>>
右移操作就是最右侧为不要了,最左侧补符号位,如果原先是正数,则补0,如果是负数,则补1;
public class WeiYunSuan {
public static void main(String[] args) {
byte a=85;
//01010101
System.out.println(a>>1);
//00101010
byte c=-1;
//11111111
System.out.println(c>>1);
//11111111
}
}
运算结果为:
符合我们预期的料想.
3、无符号右移>>>
而讲到最后的无符号右移也就是右移的时候,左边永远都是补0,无论符号位为1还是0,以代码为例:
public class WeiYunSuan {
public static void main(String[] args) {
int c=-1;
//11111111 11111111 11111111 11111111
System.out.println(c>>>1);
//01111111 11111111 11111111 11111111
}
}
运算结果为:
三、条件运算符(三目运算符)
条件运算符只有一个:
表达式1?表达式2:表达式3
当表达式1的值为true时,整个表达式的值为表达式2的值;
当表达式1的值为false时,整个表达式的值为表达式3的值;
这也是java唯一的一个三目运算符,时判断语句的简化写法,我举一个小的例子,比如求俩个数的最大值:
public class WeiYunSuan {
public static void main(String[] args) {
int a=0;
int b=1;
int c=a>b?a:b;
System.out.println(c);
}
}
运算结果为:
值得注意的是,三目运算符不能单独存在,如果上面代码单独一行a>b?a:b会直接报错,而三目运算符也是我们最常见的一种写法。