Javascript Tilde & Two's complement

后端 未结 5 703
陌清茗
陌清茗 2020-11-28 16:08

Two\'s complement method - generates -(x + 1).

for example when JavaScript encounters the Tilde he uses this method:

~5 = -(5+1) = -6         


        
相关标签:
5条回答
  • 2020-11-28 16:30

    First of all, you need to realize that ~ is the bitwise flip operator, which is not the same as the negate operator -. ~ does only do the bitwise flipping, but the negate operator - does bitwise flipping and add one (for integers).

    As you've explained, if yo want to go from a postive number n to -n using the two complement method you bitwise flip/not n and add 1. ~n is just the bit-wise not meaning that ~n=-n-1.

    For instance:

    5               = 0000 0101
    Flipped (~5)    = 1111 1010
    

    So, which number does 1111 1010 represent? Since the first digit is a 1 we know it's a negative value. To find which value, do

    -(flip(1111 1010) + 1) =
    -(0000 0101 + 1)
    -(0000 0110) =
    -6
    
    0 讨论(0)
  • 2020-11-28 16:30

    Two's complement method - generates -(x + 1).

    Simply put, two's complement does not generate -(x + 1). One's complement does (i.e., ~ / bitwise NOT / flipping the bits).

    Two's compliment (flip the bits, add 1) is the (-0 averse) operation/encoding we use to express a negative number in pure bits (and derive it therefrom). Two's complement of x will generate -x.

    ~5 is nothing more than flipping the bits 0000 0101 to 1111 1010.

    To determine the value of 1111 1010, we flip back to 0000 0101 and add 1: 0000 0110 (-6).

    0 讨论(0)
  • 2020-11-28 16:31

    ~ is the Bitwise NOT operator (only inverts the bits of its operand).

    For a positive number n,

    ~n + 1 = -n
    
    0 讨论(0)
  • 2020-11-28 16:34

    Tild(~) -

    it is just flip(n). I.e. ~5 = flip(5). In java script numbers are always 64 bit signed. let us take Just 8 bit for reference,

     5==> 0000 0101 
    ~5 ==> filp(0000 0101)
    ~5 ==> 1111 1010 ==> -6 
    

    2' complement -

    It's filp(n) + 1.

    5 ==> 0000 0101
    2's complement of 5 ==> flip(0000 0101) + 0000 0001
    2's complement of 5 ==> 1111 1010 + 000 0001
    2's complement of 5 ==> 1111 1011
    
    0 讨论(0)
  • 2020-11-28 16:39

    ~5 = -(5 + 1) = -6

    so far so good. However, ~ is not the two's complement, it's the binary inversion operator.

    5     = 0000 0101
    flip  : 1111 1010
    

    which is -6

    does that make it clear?

    0 讨论(0)
提交回复
热议问题