zoukankan      html  css  js  c++  java
  • java中,有关移位运算符的有关讨论

    java中有三种移位运算符

        <<      :     左移运算符,num << 1,相当于num乘以2

        >>      :     右移运算符,num >> 1,相当于num除以2

        >>>    :     无符号右移,忽略符号位,空位都以0补齐

    <<运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
      语法格式:
      需要移位的数字 << 移位的次数
      例如: 3 << 2,则是将数字3左移2位
      计算过程:
      3 << 2
      首先把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100,则转换为十进制是12.数学意义:
      在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
      >>运算规则:按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1.
      语法格式:
      需要移位的数字 >> 移位的次数
      例如11 >> 2,则是将数字11右移2位
      计算过程:11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0010.转换为十进制是3.数学意义:右移一位相当于除2,右移n位相当于除以2的n次方。
      >>>运算规则:按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。
      其他结构和>>相似。
      小结
      二进制运算符,包括位运算符和移位运算符,使程序员可以在二进制基础上操作数字,可以更有效的进行运算,并且可以以二进制的形式存储和转换数据,是实现网络协议解析以及加密等算法的基础。

        

    public class URShift {
      public static void main(String[] args) {
      int i = -1;
      i >>>= 10;
      //System.out.println(i);
      mTest();
      }
      public static void mTest(){
      //左移
      int i = 12; //二进制为:0000000000000000000000000001100
      i <<= 2; //i左移2位,把高位的两位数字(左侧开始)抛弃,低位的空位补0,二进制码就为0000000000000000000000000110000
      System.out.println(i); //二进制110000值为48;
      System.out.println("<br>");
      //右移
      i >>=2; //i右移2为,把低位的两个数字(右侧开始)抛弃,高位整数补0,负数补1,二进制码就为0000000000000000000000000001100
      System.out.println(i); //二进制码为1100值为12
      System.out.println("<br>");
      //右移example
      int j = 11;//二进制码为00000000000000000000000000001011
      j >>= 2; //右移两位,抛弃最后两位,整数补0,二进制码为:00000000000000000000000000000010
      System.out.println(j); //二进制码为10值为2
      System.out.println("<br>");
      byte k = -2; //转为int,二进制码为:0000000000000000000000000000010
      k >>= 2; //右移2位,抛弃最后2位,负数补1,二进制吗为:11000000000000000000000000000
      System.out.println(j); //二进制吗为11值为2
      }
      }
    

      

  • 相关阅读:
    LeetCode——Generate Parentheses
    LeetCode——Best Time to Buy and Sell Stock IV
    LeetCode——Best Time to Buy and Sell Stock III
    LeetCode——Best Time to Buy and Sell Stock
    LeetCode——Find Minimum in Rotated Sorted Array
    Mahout实现基于用户的协同过滤算法
    使用Java对文件进行解压缩
    LeetCode——Convert Sorted Array to Binary Search Tree
    LeetCode——Missing Number
    LeetCode——Integer to Roman
  • 原文地址:https://www.cnblogs.com/zsping/p/5549953.html
Copyright © 2011-2022 走看看