zoukankan      html  css  js  c++  java
  • java移位操作


      int value = Integer.parseInt(“00001111101001011111000010101100″,2);//即value=262533292
     
      对int变量value执行<<32位操作,即value <<=32,这个结果是多少呢?
      如果你觉得答案是0,那么错了,它的结果还是262533292。
      不用怀疑java中int是32位的问题,而是你没有了解java的<<操作。
      在java中无论左移右移,会遵循下面的规则

      value<<n(其中value为int,n>=0) 等价于 value<<(n%32)
      value>>n (其中value为int,n>=0) 等价于 value>>(n%32)
      value>>>n (其中value为int,n>=0) 等价于 value>>>(n%32)
     
      对于long类型的:
      value<<n(其中value为long,n>=0) 等价于 value<<(n%64)
      value>>n (其中value为long,n>=0) 等价于 value>>(n%64)
      value>>>n (其中value为long,n>=0) 等价于 value>>>(n%64)
     
      而对于byte、short、char遵循int的规则
     
     二、
      int value = Integer.parseInt(“00001111101001011111000010101100″,2);//即value=262533292
      value <<= -38,这个结果是多少呢?
      你可能认为它通不过编译,抑或你认为它从左移变成右移了?
      然而,事实不是想象的那么简单,它的结果是-1342177280,这是怎么出来的?听我一一道来。
      若是对int的值移负数位,java会截取那个负数的低5位。
      -38的二进制表示是:11111111111111111111111111011010,截取低5位得:11010,这个数是26,也就是说:
      value <<= -38 等价于 value <<= 26,得到的二进制是10110000000000000000000000000000,首位为1,
      所以该二进制是补码,换成其绝对值的源码为01010000000000000000000000000000,对应的十进制为1342177280,
      加上负号就是-1342177280。
      对于int是取低5位,对于long是取低6位
      也就是说:
       value << -n(value为int,n>=0) 等价于 value << (-n & 31)
       value >> -n(value为int,n>=0) 等价于 value >> (-n & 31)
       value >>> -n(value为int,n>=0) 等价于 value >>> (-n & 31)
     
      而对于long
       value << -n(value为long,n>=0) 等价于 value << (-n & 63)
       value >> -n(value为long,n>=0) 等价于 value >> (-n & 63)
       value >>> -n(value为long,n>=0) 等价于 value >>> (-n & 63)
      
      而对于byte、short、char遵循int的规则

  • 相关阅读:
    Luogu P1273 有限电视网【树形Dp/树形背包】
    Luogu P1160队列安排【链表/老文搬家】By cellur925
    Luogu P1970 花匠 【线性Dp】 By cellur925
    Luogu P1541 乌龟棋 【线性dp】
    P2885 [USACO07NOV]电话线Telephone Wire——Chemist
    Luogu P3916 图的遍历 【优雅的dfs】【内有待填坑】By cellur925
    状压dp之二之三 炮兵阵地/玉米田 By cellur925
    Luogu P1991 无线通讯网 【最小生成树】
    浅谈并查集 By cellur925【内含题目食物链、银河英雄传说等】
    Luogu P1134 阶乘问题 【数学/乱搞】 By cellur925
  • 原文地址:https://www.cnblogs.com/hexiweb/p/3092737.html
Copyright © 2011-2022 走看看