Java 位运算总结

在Java语言中,二进制使用补码表示,最高位是符号位,正数为0,负数为1。

其中:

  1. 正数的最高位是0,其余各位代表数值本身
  2. 负数的最高位是1,通过该数绝对值的补码按位取反,再对整个数加1

Java中的位移操作,只对int类型的数据生效(对byte,short,char,long的支持是转换成int后生效)。

一个int是4个字节,一个字节8位,总共32位。

在日常的开发中,位运算使用的不多,但是合理的使用,会使得代码大大简化。

比如在判断状态是0还是1时,在和0和1之间相互切换,可以直接使用原始值进行异或操作 1^n。

Java支持的位运算符主要包括:

  1. |或
  2. &且
  3. ~非
  4. ^异或
  5. <<左移
  6. >>右移
  7. >>>无符号右移

| 按位或

只要有1个为1,值就为1

	    	 // 7 的二进制: 0000 0111
	    	 // 9 的二进制: 0000 1001
	    	 
	    	 // |   有一个为1,值就为1   0000 1111
	    	 System.out.println(7|9);

& 按位且

同时为1,才是1

	    	 // 7 的二进制: 0000 0111
	    	 // 9 的二进制: 0000 1001
	    	 
	    	 // &   同时为1,才是1      0000 0001
	    	 System.out.println(7&9);

~ 按位非

1变为0,0变为1

	    	 // 7 的二进制:   0000 0000 0000 0000 0000 0000 0000 0111
	    	 // ~   0变1,1变0 1111 1111 1111 1111 1111 1111 1111 1000
	    	 System.out.println(~7);

^ 按位异或

相同为0,不同为1

	    	 // 7 的二进制: 0000 0111
	    	 // 9 的二进制: 0000 1001
	    	 
	    	 // ^   相同则为0,不同为1   0000 1110
	    	 System.out.println(7^9);

<< 按位左移

左移,右侧补0

	    	 // 7 的二进制: 0000 0111
	    	 // 9 的二进制: 0000 1001
	    	 
	    	 // <<  左移2位,右侧补0    0010 0100
	    	 System.out.println(9<<2);

>> 按位右移

右移,如果是正数,左侧补0;如果是负数,左侧补1

	    	 // 9 的二进制: 0000 1001
	    	 
	    	 // >>  右移2位,9为正数,高位全部补0    0000 0010  
	    	 System.out.println(9>>2);
	    	 
	         // -9 的二进制: 1111 1111 1111 1111 1111 1111 1111 0111
	    	 // >>  右移2位,-9为负数,高位全部补1    1111 1111 1111 1111 1111 1111 1111 1101
	    	 System.out.println(-9>>2);

>>> 无符号右移

和右移的区别在于,符号位也跟着右移。

	    	 // -1 表示 1111 1111 1111 1111 1111 1111 1111 1111  
	    	 System.out.println(-1>>1);
	    	 System.out.println(-1>>>1);
	    	 System.out.println(-1>>>2);
	    	 System.out.println(-1>>>3);

运行结果是:

-1
2147483647
1073741823
536870911

猜你喜欢

转载自blog.csdn.net/u014209205/article/details/81486086