I have a piece of Javascript code I\'m trying to understand
// read big-endian (network byte order) 32-bit float
readFloat32 = function(data, offset) {
v
These are the shift right (with sign) and shift left operators.
Essentially, these operators are used to manipulate values at BIT-level.
They are typically used along with the the &
(bitwise AND) and |
(bitwise OR) operators and in association with masks
values such as the 0x7F
and similar immediate values found the question's snippet.
The snippet in question uses these operators to "parse" the three components of a 32 bits float value (sign, exponent and fraction).
For example, in the question's snippet:
1 - (2*(b1 >> 7))
produces the integer value 1 or -1 depending if the bit 7 (the 8th bit from the right) in the b1 variable is zero or one respectively.
This idiom can be explained as follow.
0000000000000000abcdefgh
b1 = data.charCodeAt(offset) & 0xFF
assignement a few lines above, which essentially zero-ed all the bits in b1 except for the rightmot 8 bits (0xFF mask).b1 >> 7
shifts this value to the right by 7 bits, leaving00000000000000000000000a
which, read as an integer will have value 1 or 0Although useful to illustrate the way the bit-operators work, the above idiom could be replaced by something which tests the bit 7 more directly and assigns the sign variable more explicitly. Furthermore this approach does not require the initial masking of the leftmost bits in b1:
var sign
if (b1 & 0x80) // test bit 7 (0x80 is [00000000]10000000)
sign = -1;
else
sign = 1;
It's the bitshifting operator. See here for more details.
Right and Left and shift operators.
You can read about the operators here: https://developer.mozilla.org/en/JavaScript/Reference/operators/bitwise_operators
They are bit shifts and also occur in languages other than JS.
Example: 5 >> 1 = 2
binary: 0101 shifting one position = 0010
They are bitshift operators. Numbers in the computer are represented in binary. Shifting left is equivalent to multiplying by 2 and shifting right is equivalent to dividing by 2.
For example, the number 8 is 1000
in binary. Shift left <<
by 3 would yield 1000000
which is 64. Shift right by 2 would yield 10
which is 2.
shift left and shift right operators. If you have a number it will shift its bits to left or right.