【问题标题】:What is the >> operator / operand / modifier do?>> 运算符/操作数/修饰符有什么作用?
【发布时间】:2010-01-16 12:17:18
【问题描述】:

我正在审查一些 javascript 代码,程序员在几个地方使用 >>。我试图在谷歌上搜索,但找不到这个操作数/运算符的作用。所以我在这里。下面的代码示例:

var triplet=(((binarray[i>>2]>>8*(i%4))&0xFF)<<16)|(((binarray[i+1>>2]>>8*((i+1)%4))&0xFF)<<8)|((binarray[i+2>>2]>>8*((i+2)%4))&0xFF);

【问题讨论】:

    标签: javascript md5


    【解决方案1】:

    &gt;&gt; 是右移运算符,&lt;&lt; 是左移运算符。它们对整数的操作如下:

    00001000b >> 1 = 00000100b
    00001000b << 1 = 00010000b
    

    换句话说:

    num >> 1 = num / 2
    num >> 2 = num / 4
    .
    .
    .
    num >> n = num / 2^n
    

    同样:

    num << 1 = num * 2
    num << 2 = num * 4
    .
    .
    .
    num << n = num * 2^n
    

    【讨论】:

    • 需要注意的重要一点是,在signed 类型上使用的&gt;&gt; 会进行符号扩展,也就是说,它会使最左边的位与前一个最左边的位相同,所以符号保持不变。因此(-1 &gt;&gt; 1) == -1。对于无符号类型,最左边的位设置为 0:((unsigned)-1 &gt;&gt; 1) = 0x7fffffff 在 4 字节 int 平台上。
    【解决方案2】:

    > 是常见的按位运算符。

    << is left shift and
    >> is right shift.
    

    例如:

    i << 2
    

    将 i 的值向左移动 2 位。

    您可以在此处找到更多信息(转到按位运算符部分): http://docs.rinet.ru/ProPauk/ch23.htm#BinaryOperators

    【讨论】:

      猜你喜欢
      • 2010-09-13
      • 2011-02-15
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 2014-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多