Comment basculer un int / _Bool en C

Supposons que nous avons un int et souhaitez basculer entre 0 et 1 dans un booléen de la mode. J'ai pensé aux possibilités suivantes:

int value = 0; //May as well be 1

value = value == 0 ? 1 : 0;
value = (value + 1) % 2;
value = !value; //I was curious if that would do...
  1. Le troisième semble fonctionner. Pourquoi? Qui décide que !0 est 1?
  2. Est quelque chose de mal avec l'un de ces?
  3. Existe-il d'autres possibilités? par exemple, les opérateurs sur les bits?
  4. Qui offre les meilleures performances?
  5. Seraient tous être identiques avec _Bool (ou bool de stdbool.h)? Si non, quelles sont les différences?

EDIT: Beaucoup de grandes réponses avec beaucoup d'informations précieuses, merci! Malheureusement, je ne peux accepter.

source d'informationauteur riha