Negative numbers to binary string in JavaScript

Short answer:

  1. The toString() function takes the decimal, converts it
    to binary and adds a “-” sign.

  2. A zero fill right shift converts it’s operands to signed 32-bit
    integers in two complements format.

A more detailed answer:

Question 1:

//If you try
(-3).toString(2); //show "-11"

It’s in the function .toString(). When you output a number via .toString():

Syntax

numObj.toString([radix])

If the numObj is negative, the sign is preserved. This is the case
even if the radix is 2; the string returned is the positive binary
representation of the numObj preceded by a – sign, not the two’s
complement of the numObj.

It takes the decimal, converts it to binary and adds a “-” sign.

  1. Base 10 “3” converted to base 2 is “11”
  2. Add a sign gives us “-11”

Question 2:

// but if you fake a bit shift operation it works as expected
        (-3 >>> 0).toString(2); // print "11111111111111111111111111111101"

A zero fill right shift converts it’s operands to signed 32-bit integers. The result of that operation is always an unsigned 32-bit integer.

The operands of all bitwise operators are converted to signed 32-bit
integers in two’s complement format.

Leave a Comment