今天继续自学java,因为以前上过java课程,所以学习的进度很快,各种编程语言有很多想通的地方,就当是复习了。 今天遇到了一个知识点,java的位运算符。大二上java课时这部分我听得不仔细,也不求甚解。后来学习到了汇编语言,深入的了解了内存中比特位的相关细节。回过头来看java的位运算符便有了新的体验。 位运算符的操作对象是二进制的0和1,这是一种非常高效但可读性较低的运算方式。 这里用一段java代码举例来深入了解位运算符。
class wugn{
	public static void main(String[]args){
		System.out.println(6 & 3);
		System.out.println(6 | 3);
		System.out.println(6 ^ 3);
		System.out.println(6 ^ 3 ^ 3);
		System.out.println(~ 6);
		System.out.println(16 >> 3);
		System.out.println(6 << 3);
		System.out.println(-16 >>> 3 );
	}
}
这八种位运算的运算结果分别是:2, 7, 5, 6, -7, 2, 48, 536870910. 内部运算过程: 6 & 3 = 2 -> 0110 & 0011 -> 0010 -> 2 6 | 3 = 7 -> 0110 | 0011 -> 0111 -> 7 6 ^ 3 = 5 -> 0110 ^ 0011 -> 0101 -> 5 异或同一数字两次,结果等于本身 ~ 6 = -7 -> (0110)6 -> (1001)~6 -> -(0111)7 16 >> 3 -> 0001-0000 -> 0000-0010 -> 2 6 << 3 -> 0000-0110 -> 0011-0000 -> 48 -16 >>> 3 -> (右移三位,高位补0)