前言
星期一,怎么突然学起来了运算符?是不是有点奇怪,当然不是突然想起来学的,而是特意来复习一遍(在代码中看到一个很高级的写法,嘿嘿!有用到位运算,厉害厉害~)
运算符
本来想直接写运算符的,但是想先简单讲一下什么是位运算。
# 比如简单的加法
int a = 35;
int b = 47;
int c = a + b;
当然在计算机中都是以二进制来进行运算,所以上面我们所给的 int 变量会在机器内部先转换为二进制在进行相加。如下面代码:
35: 0 0 1 0 0 0 1 1
47: 0 0 1 0 1 1 1 1
————————————————————
82: 0 1 0 1 0 0 1 0
有点厉害欸!那就接着正题”运算符“先来个表格熟悉一下!
符号 |
名称 |
运算规则 |
& |
按位与(与) |
两个位都为1时,结果才为1 |
| |
按位或(或) |
两个位都为0时,结果才为0 |
^ |
异或 |
两个位相同为0,相异为1 |
~ |
取反 |
0变1,1变0 |
>> |
右移 |
各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移)有的补0(逻辑右移) |
左移 |
各二进位全部左移若干位,高位丢弃,低位补0 |
这看起来多少有点离谱,哈哈哈~反正我第一次学的时候,半天不会算,现在也不一定会,但是我有工具,算的嘎嘎快了!接下来粗略解释一下,不然真的一脸懵。
按位与&
public class HelloWorld {
public static void main(String []args) {
System.out.println("按位与&");
System.out.println(0&0); #结果0
System.out.println(0&1); #结果0
System.out.println(1&0); #结果0
System.out.println(1&1); #结果1
}
}
旁边是结果,是不是有点理解【两个位都为1时,结果才为1】没错就是这样的。这个在线工具真的很好!推荐给你们菜鸟工具。比如5&3
public class HelloWorld {
public static void main(String []args) {
System.out.println(5&3); #结果1
}
}
不同懂为什么是1吗?别急,你要明白在计算机中都是以二进制来进行运算,所以我们转换一下
public class HelloWorld {
public static void main(String []args) {
# 输出11 在前面补充0,补满八位,意思就是0000 0011这个就是3
System.out.println(Integer.toBinaryString(3));
# 输出101 在前面补充0,补满八位,意思就是0000 0101这个就是5
System.out.println(Integer.toBinaryString(5));
}
}
按位或|
public class HelloWorld {
public static void main(String []args) {
System.out.println(0|0);#结果0
System.out.println(0|1);#结果1
System.out.println(1|0);#结果1
System.out.println(1|1);#结果1
System.out.println(5|3);#结果7
}
}
这个7不懂嘛?那就不懂算了(生气)
异或^
public class HelloWorld {
public static void main(String []args) {
System.out.println(0^0);#0
System.out.println(0^1);#1
System.out.println(1^0);#1
System.out.println(1^1);#0
System.out.println(5^3);#6
}
}
取反~
~1=0 ~0=1
右移>>和左移
public class HelloWorld {
public static void main(String []args) {
System.out.println(8>2); #2
}
}
public class HelloWorld {
public static void main(String []args) {
System.out.println(8>2); #2
}
}