0015 原码反码补码和位运算符

/*    原码、反码和补码
    1.二进制的最高位时符号位,0表示正数,1表示负数
    2.正数的原码、反码、补码都一样(三码合一)
    3.负数的反码 = 原码符号位不变,其他位取反 0变1,1变0
    4.负数的补码 = 反码 + 1 ,负数的反码 = 补码 - 1
    5.0的反码、补码都是0
    6.计算机运算时,都是以 补码 方式来运算的
    7.当我们看运算结果时,看的是原码
*/

/*    位运算符
    Java中有7个位运算符
    按位与&:两位全为1,结果为1,否则为0
    按位或|:两位有一个为1,结果为1,否则为0
    按位异或^:两位一个为0,一个为1,结果为1,否则为0
    按位取反~:0变1,1变0
    算术右移>>:低位溢出,符号位不变,并用符号位补溢出的高位
    算术左移<<:符号位不变,低位补0
    逻辑右移(无符号右移)>>>:低位溢出,高位补0
*/

/*    演示1:2&3
    1.先得到2的原码 00000000 00000000 00000000 00000010
      因为正数三码合一,所以2的补码和原码相同    00000000 00000000 00000000 00000010
    2.3的原码     00000000 00000000 00000000 00000011
      因为正数三码合一,所以3的补码和原码相同    00000000 00000000 00000000 00000011
    3.按位与&:两位全为1,结果为1,否则为0
         2的补码:00000000 00000000 00000000 00000010
         3的补码:00000000 00000000 00000000 00000011
             新补码:00000000 00000000 00000000 00000010
    4.因为符号位为0是正数,所以原码就是补码 00000000 00000000 00000000 00000010
    5.结果为 2
*/
public class BitOperator {

    public static void main(String[] args) {

        System.out.println(2&3);

/*    演示2:~-2
    1.先得到-2的原码                         10000000 00000000 00000000 00000010
    2.-2的反码 = 符号位不变,其他取反。     11111111 11111111 11111111 11111101
    3.-2的补码 = 反码 + 1.                 11111111 11111111 11111111 11111110
    4.按位取反~ 0变1,1变0.                 00000000 00000000 00000000 00000001
    5.结果为1
*/

        System.out.println(~-2);

/*    演示3:~2
    1.先得到2的原码                           00000000 00000000 00000000 00000010
    2.2的补码和原码相同                       00000000 00000000 00000000 00000010
    3.按位取反~0变1,1变0.                 11111111 11111111 11111111 11111101
    4.负数的反码 = 补码 - 1.                  11111111 11111111 11111111 11111100
    5.负数的原码 = 符号位不变,其他取反      10000000 00000000 00000000 00000011
    6.结果为-3
*/
        System.out.println(~2);

/*    演示4:1>>2;
    1.得到1的补码                                00000000 00000000 00000000 00000001
    2.低位溢出,符号位不变,并用符号位补溢出的高位    00000000 00000000 00000000 00000000
    3.结果为0,本质是1 / 2 / 2= 0

    演示5:1<<2;
    1.得到1的补码                        00000000 00000000 00000000 00000001
    2.符号位不变,低位补0                 00000000 00000000 00000000 00000100
    3.结果为4,本质1 * 2 * 2 = 4

    演示6:15>>2;

    本质为 15 / 2 / 2 = 3

    演示7:4<<3;

    本质为 4 * 2 * 2 * 2= 32
*/
        System.out.println(1 >> 2);
        System.out.println(1 << 2);
        System.out.println(15>>2);
        System.out.println(4 << 3);

    }
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nzmzmc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值