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。
这个习语可以解释如下。
0000000000000000abcdefgh
注意左边的所有位都是零,这来自于
b1 = data.charCodeAt(offset) & 0xFF
分配在上面的几行,其实质上将b1中除了右侧8位(0xFF掩码)之外的所有位置零。 a,b,c ... thru h表示未知的布尔值,即0或1。
我们有兴趣测试a的价值。
b1 >> 7
将此值右移7位,然后离开 b1作为
00000000000000000000000a
,读取为整数将具有值1或0 然后分别是2或0。
虽然可以用来说明位操作符的工作方式,但上述习语可以用更直接地测试位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