位运算符

来源:互联网 发布:三菱fx2n 4da编程实例 编辑:程序博客网 时间:2024/06/16 17:40

一、&:按位与,俩个都是1才为1。

       |:按位或,只要有一个是1就是1。

      ^:异或,俩数不同位1,一个数和另一个数异或俩次还是它自己(一个数和它自身异或等于0,一个数和0异或等于它自己),多应用于加密解密。

          例:int a=10;
                 int b=6;
                 a=a^b;  //a=(a^b),
                 b=a^b; //b=a^b^b=10^6^6=10
                 a=a^b; //a=a^b^b=10^6^10=6
                System.out.println(a);
                System.out.println(b);
                输出a=6,b=10

      ~:按位取反:0变成1,1变成0。

      >>:右移,公式 a/2^n(n是右移的位数),正数右移,最高位补0,最小值0;负数右移,最高位补1,最小值-1。右移时,余数不可以是负数。右移周期0--31。

      <<:左移,公式a*2^n(n是左移的位数),左移后面补0,不论正负数最后 都移成0,左移周期0--31。

     >>> 无符号右移:负数右移一位都变成正数,最高位补0。

二、负数的二进制等于正数取反加一,-a=~a+1   -a+(-1)=~a。

三、指令:i++先赋值=0, 再加一,再赋值=0。

1.class BitDemo{
     public static void main(String[] args){

      int i=0;
      int c=i++;
     System.out.println(i);
     System.out.println(c);
  // 将0放到栈顶
  // istore_1 将栈顶的元素赋值给第二个局部变量 i=0;
  // iload_1 将第二个局部变量的值放到栈顶    0
  // iinc  1,1 i=1;
  // istore_2 将栈顶的元素赋值给第三个局部变量c=0;
  // System.out.println(iload_1); i=1;
  // iload_1 第二个局部变量
  //System.out.println(iload_2);
  // iload_2
   
 }

}

2.class BitDemo10{
 public static void main(String[] args){
  // 第一个局部变量是args
  //show();
  int i=0;
  i=i++;
  System.out.println(i);
  //iconst_0  将0放到栈顶
  //istore_1 将int值存到第二个局部变量中 i=0;
  // iload_1 将第二个局部变量的值放到栈顶 0
  // iinc i=1;
  //istore_1 将栈顶的元素给第二个局部变量i=0;

}

}