web-dev-qa-db-fra.com

Que signifie (~ 0L)?

Je fais du codage de types X11, je ne connais pas C mais j'ai besoin d'aide pour le comprendre.

Dans le code C ci-dessous (peut être C++, je ne suis pas sûr), nous voyons (~0L) Qu'est-ce que ça veut dire? En Javascript et Python ~0 veux dire -1.

812   int result = GetProperty(window, property_name,
813                            (~0L), // (all of them)
814                            &type, &format, &num_items, &properties);

Merci

13
Noitidart

0L est une valeur entière long avec tous les bits mis à zéro - c'est généralement la définition de 0. Le ~ signifie inverser tous les bits, ce qui vous laisse un long entier avec tous les bits mis à un.

Dans l'arithmétique du complément à deux (qui est presque universel) une valeur signée avec tous les bits mis à un est -1.

La raison d'utiliser ~0L au lieu de -1L doit être plus clair quant à l'intention - il ne doit pas du tout être utilisé comme un nombre, mais plutôt comme une collection de bits.

18
Mark Ransom

Complément binaire de zéro de type long.

3
Bill