美文网首页
001:位运算

001:位运算

作者: 卫泽洪_70a7 | 来源:发表于2021-03-07 11:07 被阅读0次

    位运算符:3个位运算符 >>、<< 和 >>> 运算规则:

    1、算数右移>>:低位溢出,符号位不变,并用符号位补溢出的高位
    2、算数左移<<:符号位不变,低位补0
    3、>>>逻辑右移也叫无符号右移,运算规则是:低位溢出,高位补0
    4、特别说明:没有<<<符号

    第一题:

            int a = 1 >> 2;
            int b = -1 >> 2;
            int c = 1 << 2;
            int d = -1 << 2;
            int e = 3 >>> 2;
            System.out.println("a=" + a);//0
            System.out.println("b=" + b);//-1
            System.out.println("c=" + c);//4
            System.out.println("d=" + d);//-4
            System.out.println("e=" + e);//0
    

    第二题

            ~2;
            2&3
            2|3
            ~-5
            13&7
            5|4
            -3^3
          ~-2
    

    解析:
    1、~2的结果是什么

     得到2的补码:00000000 00000000 00000000 00000010
    ~操作           :11111111 11111111 11111111 11111101(运算后的补码)
    补码减一得到反码:11111111 11111111 11111111 11111100
    运算后的原码:10000000 00000000 00000000 00000011
    结果:-3!!!
    

    2、2&3

    按bit位与运算
    2的原码:00000000 00000000 00000000 00000010
    2的补码:00000000 00000000 00000000 00000010
    3的补码:00000000 00000000 00000000 00000011
    与运算      00000000 00000000 00000000 00000010(这个运算后得到的补码)
    结果原码  00000000 00000000 00000000 00000010(正数三码合一)
    所以结果是2!!!
    

    3、2|3

    2 的补码:00000000 00000000 00000000 00000010
    3 的补码:00000000 00000000 00000000 00000011
    |运算     : 00000000 00000000 00000000 00000011(这是补码)
    原码      :00000000 00000000 00000000 00000011
    结果:3!!!
    

    4、 ~-5

    -5的原码:10000000 00000000 00000000 00000101
    -5的反码:11111111 11111111 11111111 11111010
    -5的补码:11111111 11111111 11111111 11111011
    取反       :00000000 00000000 00000000 00000100(这是运算后的补码)
     
    结果是:4!!!(三码合一)
    

    5、13&7

    13的补码:00000000 00000000 00000000 00001101
    7的补码  :00000000 00000000 00000000 00000111
    &运算:      00000000 00000000 00000000 00000101
    结果:5!!!
    

    6、5|4

    5的补码:00000000 00000000 00000000 00000101
    4的补码:00000000 00000000 00000000 00000100
    |运算:     00000000 00000000 00000000 00000101
    结果:5!!!
    

    7、 -3^3

    -3的原码:10000000 00000000 00000000 00000011
    -3的反码:11111111 11111111 11111111 11111100
    -3的补码:11111111 11111111 11111111 11111101
    3的补码:00000000 00000000 00000000 00000011
    ^运算:    11111111 11111111 11111111 11111110(这是结算后的补码)
    减一:       11111111 11111111 11111111 11111101
    取反:       10000000 00000000 00000000 00000010
    结果:-2!!!
    

    8、~-2

    推导
    //1、先得到-2的原码 :10000000 00000000 00000000 00000010
    //2、-2的反码            :11111111 11111111 11111111 11111101
    //3、-2的补码            :11111111 11111111 11111111 11111110
    //4、执行~操作          :00000000 00000000 00000000 00000001(这是运算后的补码)
    //5、对应的原码        :00000000 00000000 00000000 00000001(三码合一)
    //结果:1!!!
    
    

    相关文章

      网友评论

          本文标题:001:位运算

          本文链接:https://www.haomeiwen.com/subject/ksveqltx.html