Negative numbers to binary string in JavaScript

前端 未结 5 1447
无人及你
无人及你 2020-11-30 22:15

Anyone knows why javascript Number.toString function does not represents negative numbers correctly?

//If you try
(-3).toString(2); //shows \"-11\"
// but if         


        
5条回答
  •  没有蜡笔的小新
    2020-11-30 22:45

    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.

提交回复
热议问题