* @笔记:
 * 一、二进制
 *    1.原码,反码,补码
 *      (1)二进制最高位是符号位,0表示正数,1表示负数。
 *      (2)正数的原码,反码,补码都是一样的。
 *      (3)负数的反码是原码除符号位不变,其他位取反。
 *      (4)负数的补码 = 负数的反码 + 1.
 *      (5)0的反码和补码都是0。
 *      (6)java没有无符号数。
 *      (7)在计算机运算时,都是以补码的方式运算。
 *      例: 1-2 = 1+(-2) => 0000 0001 + 1000 0010 (原码)=> 0000 0001 + 1111 1110(补码)
 *          0000 0001
 *      +   1111 1110
 *      =   1111 1111 (补码)   =>    1000 0001(原码)    =>    -1
 *    2.基本运算
 *    &(按位与),|(按位或),^(按位异或),~(按位取反)
 *    移位运算符:
 *    >>算数右移:低位溢出,符号位不变,并用符号位补溢出的高位
 *    <<算数左移:高位溢出,符号位不变,低位补0。
 *    >>>逻辑右移:低位溢出,高位补0。
 *

 */

package com.shuiyixin1;

public class learnJ_002weiyunsuan {

/**
* @作者:shuiyixin
* @日期:2018.01.31
* @内容:位运算,二进制,移位运算符
*
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
byte a = 1>>2; //0
//1的补码是0000 0001,右移两位变成:0000 0000,即0

byte b = -1>>2; //-1
//-1的补码是 1111 1111,右移两位变成1111 1111,化为原码得:1000 0001,即-1

byte c = 1<<2; //4
//1的补码是0000 0001,左移两位变成:0000 0100,即4

byte d = -1<<2; //-4
//-1的补码是 1111 1111,左移两位变成1111 1100,化为原码得:1000 0100,即-4

byte e = 1>>>2; //0
//1的补码是0000 0001,右移两位变成:0000 0000,即0

System.out.println("1>>2 = " + a);
System.out.println("-1>>2 = " + b);
System.out.println("1<<2 = " + c);
System.out.println("-1<<2 = " + d);
System.out.println("1>>>2 = " + e);
System.out.println("1>>2 = " + (~2));
System.out.println("-13>>2 = " + (-13>>2));
}

}