zoukankan      html  css  js  c++  java
  • java位运算符

    位运算:用于2进制运算

    System.out.print(6&3);
      110
    &011
    --------
      010
    //  6&3  转换成2进制  0为false ,1为true   结果为2; 或运算只要是有效位都保留;
    6^3  6异或3
    转换为2进制
    110
    011
    -----
    101
    4,2,1   1+4=5
    5^3
    101
    011
    -----
    110  
    4,2,1  4+2=6   结论一个数异或同一个数两次还是这个数;例6^3^3=6   可以用于加密处理中
    System.out.println(~6); 取这个数的反码 ,实际为取反 0变1 1变0 ,取反加1 结果为-7 -7+1=-6
    System.out.println(3<<2);
    //3往左移2位  ,3为int型 所以是32位在内存中
    0000-0000 0000-0000 0000-0000 0000-0011 
    00-0000 0000-0000 0000-0000 0000-001100   左移2位结果
    3<<2=12   3<<3=24
    3*2(2)=12   3*2(3)=24 
    结论实际上左移x就是乘以2的x次幂
    6>>1
    0000-0000 0000-0000 0000-0000 0000-0110
    00000-0000 0000-0000 0000-0000 0000-011  6右移1位后
    6>>2
    000000-0000 0000-0000 0000-0000 0000-01  6右移2位后
    结论实际上右移就是该数局除以2的几次幂
    >>>  三个大于号右移与两个区别   数据进行右移时高位出现了空位,不论原高位是什么,空位否用0补
    2*8=16;使用最快的方式算出2*8
    // 最快方式就是移位 2*2(3)  2向左移3位   2<<3
    运算过程  , 比较复杂
         0010
       *1000
       ----------
          0000
        0000 
      0000
    0010
    -------------
        10000
    使用位运算 完成 两个整数变量交换数值
    可以采用方式 
    int a=3,b=5;
    a=a+b;
    b=a-b;
    a=a-b;
    虽然可以实现但是容易超出int范围
    第二种方式 (位运算完成)
    a=a^b;
    b=a^b;
    a=a^b;
    通过位运算完成交换  面试常用
    第三种方式
    int c;
    c=a;
    a=b;
    b=c;
    开发时使用
  • 相关阅读:
    几种常用的曲线
    0188. Best Time to Buy and Sell Stock IV (H)
    0074. Search a 2D Matrix (M)
    0189. Rotate Array (E)
    0148. Sort List (M)
    0859. Buddy Strings (E)
    0316. Remove Duplicate Letters (M)
    0452. Minimum Number of Arrows to Burst Balloons (M)
    0449. Serialize and Deserialize BST (M)
    0704. Binary Search (E)
  • 原文地址:https://www.cnblogs.com/wangyinxu/p/6495925.html
Copyright © 2011-2022 走看看