随笔:Java位运算举例

package given.come.test;
/**
 * 
 * @author Given
 *
 */
public class BitShiftDemo {
	public static void main(String[] args) {
		/**
		 * 如果首位是正数,源码、反码、补码一样,
		 * 负数的话,源码取反得到反码,反码+1进位形成补码
		 * 然后再进行位运算
		 */
		int a=-16,b=16;//定义整型变量a,赋初值为-16,定义整型变量b,赋初值为16,
		
		System.out.println("**************************************");
		System.out.println("a的二进制为:\t"+Integer.toBinaryString(a));//将整型a转换为二进制并输出
		System.out.println("a左移1位后各位为:\t"+Integer.toBinaryString(a<<1));//a位运算左移1位后,装换为二进制并输出
		System.out.println("\t\t"+a+"a<<2="+(a<<2));//输出a通过位运算左移两位后得到的十进制数
		 //源码	10000000000000000000000000010000	-16		
	    //反码	11111111111111111111111111101111	+1	
	    //补码	11111111111111111111111111110000
		/*12	10^2	1200
	    2^2
	    11111111111111111111111111000000
	    11111111111111111111111110111111
	    10000000000000000000000001000000*/
		
		System.out.println("**************************************");
		System.out.println("a的二进制为:\t"+Integer.toBinaryString(a));//将整型a转换为二进制并输出
		System.out.println("a右移1位后各位为:\t"+Integer.toBinaryString(a>>1));//a带符号右移1位后,转换为二进制并输出
		System.out.println("\t\t"+a+"a>>2="+(a>>2));//输出a带符号右移2位后得到的十进制数
		//补码	 11111111111111111111111111110000
		//右移1位	 11111111111111111111111111111000
		//右移2位	 10000000000000000000000000000100  -2^2=-4
		
		System.out.println("**************************************");
		System.out.println("a的二进制为:\t"+Integer.toBinaryString(a));//将整型a转换为二进制并输出
		System.out.println("a右移1位后各位为:\t"+Integer.toBinaryString(a>>1));//a带符号右移1位后,转换为二进制并输出
		System.out.println("\t\t"+a+"a>>>2="+(a>>>2));//输出a不带符号右移2位后得到的十进制数
		//补码	 		11111111111111111111111111110000
		//右移1位	 		11111111111111111111111111111000
		//不带符号右移2位	00111111111111111111111111111100	1073741820
		
		System.out.println("**************************************");
		System.out.println("b的二进制为:\t"+Integer.toBinaryString(b));//将整型b装换为二进制并输出
		System.out.println("b左移1位后各位为:\t"+Integer.toBinaryString(b<<1));//b位运算左移1位后,转换为二进制并输出
		System.out.println("\t\t"+b+"<<2="+(b<<2));//输出b位运算左移2位后得到的十进制数
		//源码 	00000000000000000000000000010000	    2^4=16
		//		00000000000000000000000000100000    左移1位   2^5=32
		//		00000000000000000000000001000000    左移2位	2^6=64
		
		System.out.println("**************************************");
		System.out.println("b的二进制为:\t"+Integer.toBinaryString(b));//将整型b装换为二进制并输出
		System.out.println("b右移1位后各位为:\t"+Integer.toBinaryString(b>>1));//b位运算右移1位后,转换为二进制并输出
		System.out.println("\t\t"+b+"b>>2="+(b>>2));//输出b位运算右移2位后得到的十进制数
		//源码 	00000000000000000000000000010000	    	2^4=16
		//		00000000000000000000000000001000 	右移1位       2^3=8
		//		00000000000000000000000000000100	右移2位       2^2=4
		
		System.out.println("**************************************");
		System.out.println("b的二进制为:\t"+Integer.toBinaryString(b));//将整型b装换为二进制并输出
		System.out.println("b右移1位后各位为:\t"+Integer.toBinaryString(b>>1));//b位运算右移1位后,转换为二进制并输出
		System.out.println("\t\t"+b+"b>>>2="+(b>>>2));//输出b无符号右移2位后得到的十进制数
		System.out.println("**************************************");
		//源码 	00000000000000000000000000010000	    		 2^4=16
		//		00000000000000000000000000001000 	右移1位       	 2^3=8
		//		00000000000000000000000000001000 	无符号右移2位         2^2=4
	}
}

 

你可能感兴趣的:(java基础,Java,位运算,无符号右移,十进制,二进制)