二进制基本操作

1、位或 : |=

两个二进制数,对应位置都为0时,为0,否则为1

/**
 * 按位或,对应位置都为0,则为0,否则为1
 */
public static void fisrtOperation() {
    int a = 5;  //0101
    int b = 7;  //0111
                //------
    a |= b;     //0111
    System.out.println(a);   // 7

}

2、位与:&=

两个二进制数,对应位都为1时,为1,否则为0

/**
 * 按位与,对应位置都为1,则为1,否则为0
 */
public static void secondOperation(){
    int a = 5;  //0101
    int b = 7;  //0111
                //------
    a &= b;     //0101

    System.out.println(a);  // 5
}

3、异或:^=

两个二进制数,对应位置相同为0,不同为1

/**
 * 异或,对应位置相同为0,不同为1
 */
public static void thirdOpreation(){
    int a = 5;  //0101
    int b = 7;  //0111
    //------
    a ^= b;     //0010

    System.out.println(a);  // 2
}

4、左移 << 

/**
 * 左移n位,右边补0
 */
public static void fourthOpreation() {
    int a = 5; //0101
    a = a << 1;
    System.out.println(a); // 1010  --10

    int b = 8; // 1000
    b = b << 2;
    System.out.println(b); //0010 0000 -- 32
}

5、右移 >>

/**
 * 右移n位,左边补0
 */
public static void fifthOpreation() {
    int a = 5; //0101
    a = a >> 1;
    System.out.println(a); // 0010

    int b = 8; // 1000
    b = b >> 2;
    System.out.println(b); //0010
}

6、无符号右移 >>>

/**
 * 无符号右移,向右位移指定位数,左边补0
 */
public static void sisthOperation(){
int a = 31; //0001 1111
a = a >>> 2;
System.out.println(a);  //0000 0111

}

 

7、取反 ~ 按位非

/**
 * 取反
 */
public static void fourthOpreation(){
    int a = 5;  //0110
    System.out.println(~a); //1001
}

负数(一个字节为例)

1 的二进制 0000 0001

-1的二进制 1000 0001

最高位为符号位,0为正数,1为负数

正数的反码,补码都和其源码相同

负数的反码,除符号位以外取反

-1的反码 1111 1110

补码为反码加一 1111 1111

二进制只有加法,要作减法可将减数当作负数

取其补码,与被减数作加法(加法都是补码操作,正数相加,源码就是其补码)

例 29 -73

29的补码  0001 1101

-73的源码 1100 1001

取反 1011 0110

加一1011 0111 这是-73的补码

补码相加得 1101 0100 ,这是结果的补码,要得到源码,即补码转源码

补码转源码,取反 ,加一既可以得到源码

1101 0100 取反得 :1010 1011 再加一得 1010 1100 转成10进制为 -44

同理 73 -29 

73源码 0100 1001

-29 源码 1001 1101 取反得 1110 0010 再加一得 1110 0011 为补码

补码相加:0010 1100 得到为正数,补码即为源码 值44

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值