C'est très simple en fait si on sait que !0==1 et que ~ est l'inversion de bits (à condition de connaître la notation des nombres en binaire).
On va ici prendre des entiers sur 4 bits, même si c'est pas réaliste ça me fait moins à taper.
Intéressons-nous au sens de l'opération suivante :
1111 + 1 = 0
En fait, si on avait pris des entiers sur 5 bits, ça aurait donné 10000. Il se trouve que la notation des nombres négatifs en complément à 2 est telle qu'on peut effectuer les additions de la même manière que si on avait plus de bits et qu'on tronquait ensuite.
Ainsi, puisqu'on a encore
x + ~x = 1111 (ou 11…1 selon le nombre de bits des entiers)
et qu'on a toujours
1111 + 1 = 0
alors
x + ~x = -1
C'est ainsi qu'on obtient :
~x = -x - 1 !
Ce n'est donc pas étonnant que
~(!0) = ~1 = -1 - 1 = -2
:D
Si tu veux le voir en écriture binaire (ici, 10 représente 2) :
~1 + 10 = 11…10 + 10 = 0
Pour voir un exemple non trivial d'utilisation d'une telle opération binaire, regarde le challenge 1 : https://cadernis.com/d/1948
Enfin, la coloration syntaxique est disponible via un menu déroulant situé à droite du bouton URL dans l'éditeur avancé.