java 移位运算规则

来源:互联网 发布:大数据属于什么行业 编辑:程序博客网 时间:2024/05/01 13:02

int value = Integer.parseInt("00001111101001011111000010101100",2);//即value=262533292

  • Integer.parseInt()

    参数: s - 包含要分析的整数表示形式的 String ,radix - 分析 s 时使用的基数。 
    返回: 使用指定基数的字符串参数表示的整数。例如:parseInt("473", 10) 返回 473 ;parseInt("1100110", 2) 返回 102
    抛出: NumberFormatException - 如果 String 不包含可分析的 int。

  • java移位规则

    1、对int变量value执行<<32位操作,即value <<=32。结果还是262533292。

  • 正值

    在java中无论左移右移,会遵循下面的规则:
    对于int类型的:
    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的规则。

    2、对int变量value执行<<-38位操作,即value <<=-38,结果为-1342177280。若是对int的值移负数位,java会截取那个负数的低5位。 -38的二进制表示是:11111111111111111111111111011010,截取低5位得:11010,这个数是26,也就是说: value <<= -38 等价于 value <<= 26,得到的二进制是10110000000000000000000000000000,首位为1, 所以该二进制是补码,换成其绝对值的源码为01010000000000000000000000000000,对应的十进制为1342177280, 加上负号就是-1342177280。

  • 负值

    对于int是取低5位,对于long是取低6位。
    对于int类型的:
    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的规则。