102

I saw this syntax on another StackOverflow post and was curious as to what it does:

var len = this.length >>> 0;

What does >>> imply?

6
  • 1
    That's a right shift operator, but why would you right shift by zero? Is that some kind of cheap way of doing parseInt? Commented Oct 10, 2011 at 21:12
  • 5
    >>> always sets the sign bit to zero, even if you shift by zero bits. Commented Oct 10, 2011 at 21:16
  • 4
    Check this answer about why they use in this case the >>> operator: stackoverflow.com/questions/3081987/… Commented Oct 10, 2011 at 21:46
  • 1
    JavaScript triple angle bracket Commented Mar 24, 2013 at 4:05
  • 1
    Possible duplicate of What is the JavaScript >>> operator and how do you use it? Commented Jun 4, 2018 at 23:39

4 Answers 4

119

Ignoring its intended meaning, this is most likely where you'll see it used:


>>> 0 is unique in that it is the only operator that will convert any type to a positive integer:

"string"         >>> 0 == 0
(function() { }) >>> 0 == 0
[1, 2, 3]        >>> 0 == 0
Math.PI          >>> 0 == 3

In your example, var len = this.length >>> 0, this is a way of getting an integer length to use to iterate over this, whatever type this.length may be.


Similarly, ~~x can be used to convert any variable into a signed integer.

Sign up to request clarification or add additional context in comments.

2 Comments

can you explain how to iterate using >>>?
@K48 I don't think he meant iterate, I think he meant to say this forces length to become a number. (Otherwise, I am equally confused.) But here's a great answer that elucidates more: stackoverflow.com/questions/1822350/…
59

That's an unsigned right shift operator. Interestingly, it is the only bitwise operator that is unsigned in JavaScript.

The >>> operator shifts the bits of expression1 right by the number of bits specified in expression2. Zeroes are filled in from the left. Digits shifted off the right are discarded.

Comments

10

That operator is a logical right shift. Here the number is shifted 0 bits. A shift of zero bits mathemetically should have no effect.

But here it is used to convert the value to an unsigned 32 bit integer.

Comments

3

>>> is a bit-wise operator, zero-fill right shift.

I think the only effect of >>> 0 on a positive number is to round down to the nearest integer, same as Math.floor(). I don't see why this would be necessary in your example, as generally a .length property (e.g. of an Array) would be an integer already.

I've also seen the slightly shorter ~~ used in the same way: ~~9.5 == 9; // true.

3 Comments

I doubt it is the same as Math.abs() when used for negative numbers.
If you do >>> 0 on a negative number it converts it to 2's compliment, then does the right shift. Therefore -14 >>> 0 == 1073741820. (msdn.microsoft.com/en-us/library/342xfs5s%28v=vs.94%29.aspx)
@AlKepp - yup, I saw the error and fixed it - should have tested first, but this was clearly a quick-draw question :).

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.