El ejemplo que puedo darte es este:
Código PHP:
<script type="text/javascript">
var a=5;
var b=~a;//-6
alert(b);
alert(~b);//5
</script>
Pero eso no aclara demasiado.
Los números son infinitos y por lo tanto, es imposible que un sistema finito pueda representarlos. Lo que se intenta, mediante diversos mecanismos, es ampliar lo más posible el conjunto a representar.
Javascript, con esa misma finalidad, usa para representar los números negativos un sistema de representación que se llama Código binario en complemento a dos.
Los números positivos se representan como ya sabés. Pero los negativos, en cambio, se representan cambiando los bits en 1 por cero y viceversa y sumándole un uno al resultado.
Cuando usás el operador not con un número positivo no estás obteniendo un número positivo. Lo que estás obteniendo es el complemento a 1 de ese número, que en realidad corresponde a la representación de un número negativo.