What's the function of the ~ bitwise operator (Tilde)

26,938

Solution 1

This is called the two's complement arithmetic. You can read about it in more detail here.

The operator ~ is a binary negation operator (as opposed to boolean negation), and being that, it inverses all the bits of its operand. The result is a negative number in two's complement arithmetic.

Solution 2

It's a bitwise NOT.

It converts all 1s to 0s, and all 0s to 1s. So 1 becomes -2 (0b111111111110 in binary representation).

Have a look at the doc http://php.net/manual/en/language.operators.bitwise.php

Solution 3

~ flips all the bits of the number. In two's complement (google it), mathematical negation is achievable by flipping all the bits and then adding 1. If you only do the first step (ie: just flip the bits), you have the additive inverse minus 1.

Share:
26,938

Related videos on Youtube

Michiel
Author by

Michiel

Apple develover

Updated on November 01, 2022

Comments

  • Michiel
    Michiel about 1 year

    Possible Duplicate:
    What does this ~ operator mean here?
    Bit not operation in PHP(or any other language probably)

    Can someone explain me the ~ operator in PHP? I know it's a NOT-operator, but why does PHP convert following statement to the negative value of the variable minus one?

    $a = 1; echo ~$a    // echo -2
    $a = 2; echo ~$a    // echo -3
    $a = 3; echo ~$a    // echo -4  
    
    • Lightness Races in Orbit
      Lightness Races in Orbit almost 12 years
      Information about this is available all over the internet
    • buc
      buc almost 12 years
      In the duplicate, there's nothing related to the two's complement arithmetic, which is the essence of this question. I doubt it is an exact duplicate. However, this this question covers exactly the same problem.
  • akond
    akond almost 12 years
    -2 indeed. Just checked.
  • Seyfi
    Seyfi over 7 years
    It is true. It is bitwise NOT, but signed numbers representation makes the to show as ie,. -2. But if you look at binary level you will see it is completely a negation.