无符号右移运算符 —— m>>>n
-
个人分析:
步骤一:先将 m 化为二进制数。
步骤二:数据尾指针按照位数 n 前移,不管十进制正负,全部补0。
步骤三:获得 步骤二 的二进制数,转化成十进制数,得到结果。
-
例子:
public class test { public static void main(String[] args) { int a = 21; // 二进制是 0000 0000 0000 0000 0000 0000 0001 0101 System.out.println("a>>>1=" + (a >>> 1)); System.out.println("a>>>2=" + (a >>> 2)); System.out.println("a>>>26=" + (a >>> 26)); System.out.println("a>>>27=" + (a >>> 27)); System.out.println("a>>>28=" + (a >>> 28)); System.out.println("a>>>29=" + (a >>> 29)); System.out.println("a>>>30=" + (a >>> 30)); System.out.println("--------------------"); a = -21; // 二进制是 1111 1111 1111 1111 1111 1111 1110 1011 // 数字取反,末尾加一 System.out.println("a>>>1=" + (a >>> 1)); System.out.println("a>>>2=" + (a >>> 2)); System.out.println("a>>>26=" + (a >>> 26)); System.out.println("a>>>27=" + (a >>> 27)); System.out.println("a>>>28=" + (a >>> 28)); System.out.println("a>>>29=" + (a >>> 29)); System.out.println("a>>>30=" + (a >>> 30)); } }结果:
a>>>1=10 a>>>2=5 a>>>26=0 a>>>27=0 a>>>28=0 a>>>29=0 a>>>30=0 -------------------- a>>>1=2147483637 a>>>2=1073741818 a>>>26=63 a>>>27=31 a>>>28=15 a>>>29=7 a>>>30=3
与运算符 —— m&n
-
个人分析:
步骤一:m 和 n 都转化成二进制数
步骤二:两个二进制数从尾指针对齐。
步骤三:尾指针前移。
若 m 的二进制[尾指针] == 1 且 n 的二进制[尾指针] == 1,则新二进制[尾指针] == 1。
否则,新二进制[尾指针] == 0。
步骤四:获得新二进制,转换成十进制。
-
例子:
public class test { public static void main(String[] args) { int a = 10; // a 的二进制是 1010 int b = 14; // b 的二进制是 1110 int c = 5; // c 的二进制是 0101 System.out.println("a & b = " + (a & b)); System.out.println("a & c = " + (a & c)); } }结果:
a & b = 10 a & c = 0
或运算符 —— m|n
-
个人分析:
步骤一:m 和 n 都转化成二进制数
步骤二:两个二进制数从尾指针对齐。
步骤三:尾指针前移。
若 m 的二进制[尾指针] == 1 或 n 的二进制[尾指针] == 1,则新二进制[尾指针] == 1。
否则,新二进制[尾指针] == 0。
步骤四:获得新二进制,转换成十进制。
-
例子:
public class test { public static void main(String[] args) { int a = 10; // a 的二进制是 1010 int b = 14; // b 的二进制是 1110 int c = 5; // c 的二进制是 0101 System.out.println("a | b = " + (a | b)); System.out.println("a | c = " + (a | c)); } }结果:
a | b = 14 a | c = 15
异运算符 —— m^n
-
个人分析:
步骤一:m 和 n 都转化成二进制数
步骤二:两个二进制数从尾指针对齐。
步骤三:尾指针前移。
若 m 的二进制[尾指针] == n 的二进制[尾指针],则新二进制[尾指针] == 0。
否则,新二进制[尾指针] == 1。
步骤四:获得新二进制,转换成十进制。
-
例子:
public class test { public static void main(String[] args) { int a = 10; // a 的二进制是 1010 int b = 14; // b 的二进制是 1110 int c = 5; // c 的二进制是 0101 System.out.println("a ^ b = " + (a ^ b)); System.out.println("a ^ c = " + (a ^ c)); } }结果:
a ^ b = 4 a ^ c = 15
取反运算符 —— ~m
-
个人分析:
步骤一:m 转化成二进制数
步骤二:m 的二进制数 1 变成 0 ,0 变成 1。
步骤三:获得新的二进制数,末尾加一,转换成十进制。
-
例子:
public class test { public static void main(String[] args) { int a = 10; // a 的二进制是 1010 int b = 5; // b 的二进制是 0101 System.out.println("~a = " + (~a)); System.out.println("~b = " + (~b)); System.out.println("---------------"); a = -10; b = -5; System.out.println("~a = " + (~a)); System.out.println("~b = " + (~b)); } }结果:
~a = -11 ~b = -6 --------------- ~a = 9 ~b = 4
总结
- 无符号右移运算符就是不管正负全部补0
- 与运算符—— 1 & 1 = 1,1 & 0 = 0。 全对的才对
- 或运算符—— 1 | 1 = 1,1 | 0 = 1,0 | 0 = 0。有对的就对。
- 异运算符—— 1 ^ 1 = 0,0 ^ 0 = 0,1 ^ 0 = 1。不一样的就对。
- 取反运算符—— ~m = -m - 1。取反数-1。