原码、反码、补码和两种位运算

练习1:三码的说明、4中位运算

public class BitOperate {

    //原码、反码、补码(重难点)
    //有符号数的性质:(java都是有符号数)
    //正数的原码、反码和补码都一样
    //(正负数之间的三码关系)

    //int占4个字节,1个字节用8个2进制位表示(字节和比特的区分)
    //2的原码  00000000 00000000 00000000 00000010
    /*注意事项:
    1.最最最最最前面的是符号位
    2.正数三码一样
    3.0的都为0
     */

    //三码介绍:
    /*
    在计算机中运算,用的是补码;
    结果表示,用的是原码;
    (补码和原码的区别)
    补码=反码+1
    (补码和反码的联系)
    (取反的两种情况:)
    原码符号位不变,其他位取反,得到反码
    按位取反是全都取反

     */
    /*
    位运算--1:四个位运算的用法
    |按位或:有一个为1,就为1
    &按位与:两个都为1,才是1
    ~按位取反:全都取反,记住,是补码的运算
    ^按位异或:一个为0,一个为1,才为1
     */
    public static void main(String[] args) {
        System.out.println(2|3);//按位或

        //2的原码  00000000 00000000 00000000 00000010
        //2的补码  00000000 00000000 00000000 00000010
        //3的原码  00000000 00000000 00000000 00000011
        //3的补码  00000000 00000000 00000000 00000011
        //        00000000 00000000 00000000 00000010
        //结果     00000000 00000000 00000000 00000011
        //3

        System.out.println(2^3);//按位异或
        //3的补码  00000000 00000000 00000000 00000011
        //        00000000 00000000 00000000 00000010
        //结果     00000000 00000000 00000000 00000001
        //1


        System.out.println(2&3);//按位与
        //3的补码  00000000 00000000 00000000 00000011
        //2的补码  00000000 00000000 00000000 00000010
        //结果     00000000 00000000 00000000 00000010
        //2

        System.out.println(~-2);//按位取反
        //-2的原码  10000000 00000000 00000000 00000010
        //-2的反码  11111111 11111111 11111111 11111101
        //-2的补码  11111111 11111111 11111111 11111110
        //结果补码  正数      00000000 00000000 00000000 00000001
        //1

        System.out.println(~2);//按位取反
        //2的补码 00000000 00000000 00000000 00000010
        //结果补码   负数    11111111 11111111 11111111 111111101
        //结果反码          11111111 11111111 11111111 111111100
        //结果原码          10000000 00000000 00000000 000000011
        //-3

    }
}

练习2:3种位运算

public class BitOperate02 {
    /*
    位运算--2:三个位运算的用法
    1.<<算术左移:符号位不变,低位补0,相当于*2
    2.>>算术右移:符号位不变,低位溢出,用符号位补,相当于/2
    3.>>>逻辑右移:低位溢出,高位补0
     */
    public static void main(String[] args) {
        int a=1>>2;
        System.out.println("a="+a);
        int b=1<<2;
        System.out.println("b="+b);
        int f=-1>>2;
        //原码:10000000 00000000 00000000 00000001
        //反码:11111111 11111111 11111111 11111110
        //补码:11111111 11111111 11111111 11111111
        //     11111111 11111111 11111111 11111111
        //-1
        System.out.println("f="+f);
        int d=-1<<2;
        //     11111111 11111111 11111111 11111100
        //反码:11111111 11111111 11111111 11111011
        //原码:10000000 00000000 00000000 00000100
        //-4
        System.out.println("d="+d);
        int e=3>>>2;
        //  00000000 00000000 00000000 00000011
        //  00000000 00000000 00000000 00000000
        //0
        System.out.println("e="+e);
    }
}

```
posted @   f-52Hertz  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示