java数据结构之位运算

本篇是java整数型二进制位运算的一些操作,算是数据结构最基础的入门篇,大家感兴趣可以根据代码自行测试想要的场景。

1、java的int类型为32位的二进制数

         写一段程序,打印int整数类型对应的二进制(这里以最大正数和最小正数为例)

 Integer对象中MAX_VALUE为2147483647,Integer对象中MIN_VALUE为-2147483648

  这两个数的绝对值是相差1的,因为负数的时候最高位为符号位优有值。

public class PrintB {
    /**
     * @Author wangchengzhi
     * @Description 各种类型的打印二进制
     * @Date 17:03 2022/12/13
     * @Param
     * @return
     **/
    public static void print(int number){
       for(int i=31;i>=0; i--){
           //number和1左移(位运算)i位与 结果显示0或1
           System.out.print((number & (1<< i) )==0 ? "0":"1");
       }
        System.out.println();
    }

    public static void main(String[] args) {
      /**
       * int整型类型为32位  下标为0-31
       * java中二进制位的最高位表示符号位0正数  1负数
       * 正数的时候为1位置 2的n次方加和
       * 负数的时候0之后的数据取反加1
       * 取反的符号  ~
       */
   int a =Integer.MAX_VALUE;
    int b =Integer.MIN_VALUE;
    System.out.printf("最大整数:");
    System.out.println(a);
    System.out.printf("最小整数:");
    System.out.println(b);
    System.out.printf("最大整数的二进制位:");
    print(a);
    System.out.printf("最小整数的二进制位:");
    print(b);
    }
}

 2、关于java的整数型位运算

  • 取反操作

     整数类型取反的运算符为“~”,一个数值的相反数,相当于二进制位运算取反加1

public static void main(String[] args) {
        int a= Integer.MAX_VALUE;
        //取值相反数
        int b =-a;
        System.out.println(a);
        System.out.println(b);
        //位运算取反加1
        int c=~a+1;
        System.out.println(c);
    }

  

  •  取反操作特例(最小数取反还是他本身)
  public static void main(String[] args) {
        int a= Integer.MIN_VALUE;
        //取值相反数
        int b =-a;
        System.out.println(a);
        System.out.println(b);
        //位运算取反加1
        int c=~a+1;
        System.out.println(c);
    }

  • 位运算 或、与、异或的操作 
 public static void main(String[] args) {
        int a= 12;
        System.out.printf("a的二进制数:  ");
        print(a);
        int b= 13;
        System.out.printf("b的二进制数:  ");
        print(b);
        //或运算
        int c =a|b;
        System.out.printf("a|b的二进制数:");
        print(c);
        //与运算
        int d =a&b;
        System.out.printf("a&b的二进制数:");
        print(d);
        //异或运算
        int f =a^b;
        System.out.printf("a^b的二进制数:");
        print(f);

    }

  •  位移操作">>"和">>>"的区别

  >>为带符号位移,>>>为不带符号位移,不带符号位移,高位用0来补,带符号位移的符号位不变

public class PrintB {
    /**
     * @Author wangchengzhi
     * @Description 各种类型的打印二进制
     * @Date 17:03 2022/12/13
     * @Param
     * @return
     **/
    public static void print(int number){
       for(int i=31;i>=0; i--){
           //number和1左移(位运算)i位与 结果显示0或1
           System.out.print((number & (1<< i) )==0 ? "0":"1");
       }
        System.out.println();
    }

    public static void main(String[] args) {
       int a = Integer.MIN_VALUE;
        print(a);
        //带符号位移,最高位的符号位1不变,然后右移一位
        print(a>>1);
        //不带符号位移,最高位的补0,然后右移一位
        print(a>>>1);
        System.out.println("========================");
        int b = Integer.MAX_VALUE;
        print(b);
        //带符号位移,最高位的符号位1不变,然后右移一位
        print(b>>1);
        //不带符号位移,最高位的补0,然后右移一位
        print(b>>>1);
    }
}

 

本篇讲解了下java最基本的二进制位运算操作,算是新手的一个启蒙篇,大家可以用上面代码,多测试一些自己觉得有意思的场景 。后面会继续和大家分析基础的数据结构知识。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值