Javascript中“>>”和“<<”是什么意思?

我有一段Javascript代码,我试图理解

// read big-endian (network byte order) 32-bit float
readFloat32 = function(data, offset) {
    var b1 = data.charCodeAt(offset) & 0xFF,
        b2 = data.charCodeAt(offset+1) & 0xFF,
        b3 = data.charCodeAt(offset+2) & 0xFF,
        b4 = data.charCodeAt(offset+3) & 0xFF;
    var sign = 1 - (2*(b1 >> 7));       //<--- here it is and 2 lines below
    var exp = (((b1 << 1) & 0xff) | (b2 >> 7)) - 127;
    var sig = ((b2 & 0x7f) << 16) | (b3 << 8) | b4;
    if (sig == 0 && exp == -127)
      return 0.0;
    return sign * (1 + sig * Math.pow(2, -23)) * Math.pow(2, exp);
}

“>>”是什么意思? 它是一种特殊的布尔类型(如'<'或'>')


这是右移 (带符号)和左移操作员。

实质上,这些运算符用于在BIT级操纵值
它们通常与& (按位AND)和| (按位或)运算符,并与masks值(如0x7F和类似的立即数值)一起发现问题的片段。
所讨论的片段使用这些运算符来“解析”32位浮点值(符号,指数和分数)的三个分量。

例如,在问题的片段中:
1 - (2*(b1 >> 7))根据b1变量中的第7位(右起第8位)分别为0还是1而产生整数值1或-1。
这个习语可以解释如下。

  • 在开始时,b1,表示为位0000000000000000abcdefgh
    注意左边的所有位都是零,这来自于
    b1 = data.charCodeAt(offset) & 0xFF分配在上面的几行,其实质上将b1中除了右侧8位(0xFF掩码)之外的所有位置零。
    a,b,c ... thru h表示未知的布尔值,即0或1。
    我们有兴趣测试a的价值。
  • b1 >> 7将此值右移7位,然后离开
    b1作为00000000000000000000000a ,读取为整数将具有值1或0
  • 然后这个1或0的整数值乘以2
    然后分别是2或0。
  • 这个值然后从1减去,留下-1或1。
  • 虽然可以用来说明位操作符的工作方式,但上述习语可以用更直接地测试位7并更明确地指定符号变量的东西来代替。 此外,这种方法不需要对b1中最左边的位进行初始掩码:

    var sign
    if (b1 & 0x80)   // test bit 7  (0x80 is  [00000000]10000000)
      sign = -1;
    else
      sign = 1;
    

    这些是位操作员。 看看这个链接:按位运算符


    您可以在这里阅读有关运营商的信息:https://developer.mozilla.org/en/JavaScript/Reference/operators/bitwise_operators

    他们有点转变,也发生在JS以外的其他语言中。

    例如:5 >> 1 = 2

    二进制:0101移动一个位置= 0010

    链接地址: http://www.djcxy.com/p/72489.html

    上一篇: What do ">>" and "<<" mean in Javascript?

    下一篇: How do you use NSAttributedString?