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
}
}