Ce n' (~0L)?
Je suis en train de faire quelques X11 ctypes codage, je ne sais pas C, mais besoin d'un peu d'aide à comprendre cela.
Dans le code C ci-dessous (peut-être en C++ je ne suis pas sûr), nous voyons (~0L)
ça veut dire quoi? En Javascript et Python ~0
signifie -1
.
812 int result = GetProperty(window, property_name,
813 (~0L), //(all of them)
814 &type, &format, &num_items, &properties);
Grâce
Comment puis-je écrire une courte 0, tels que DES 0? Je vois: stackoverflow.com/questions/208433/...
OriginalL'auteur Noitidart | 2014-12-22
Vous devez vous connecter pour publier un commentaire.
0L
est unlong
valeur entière avec tous les bits à zéro - c'est généralement la définition de0
. Le~
moyens d'inverser tous les bits, ce qui vous laisse avec unlong
entier avec tous les bits mis à un.En complément à deux de l'arithmétique (qui est presque universel) une valeur signée avec tous les bits définis à l'une est
-1
.La raison de l'utilisation
~0L
au lieu de-1L
est pour être plus clair au sujet de l'intention, il n'est pas destiné à être utilisé comme un nombre, mais plutôt comme un ensemble de bits.11111111111111111111111111111111
si le logiciel est 32 bits et 64 1 si son 64bit1111111111111111111111111111111111111111111111111111111111111111
?Le problème, c'est que si le paramètre que vous appelez est un
long long
puis~0L
seulement inverse des bits, alors que-1
(pas de suffixe requis) inverse tous.cela dépend de votre définition de
long
. Microsoft définit comme l'32 bits, 64 bits du logiciel.Merci à tous! J'ai vraiment l'apprécier.
si c'est Python ctypes suffit d'utiliser
c_long(~0)
. De la taille d'unc_long
dépend de la plate-forme.OriginalL'auteur Mark Ransom
Au niveau du bit compliment de zéro de type long.
-1
? J'ai en quelque sorte besoin d'un numéro à mettre dans ma ctypes 😛Près de, au moins en complément à deux implémentations:
-1L
de toute façon, pourquoi ne pas simplement utiliser la même expression en C++?C'est tous les bits mis à 1.
il peut être -1L mais vous pouvez y penser comme cela. Si un 64bit 0L est de 8 octets tous les zéros (et chaque octet de 8 bits sont nuls), puis le ~0L opération signifie que vous prenez tous les 0 des bits dans les octets et tournez-les de 1. Donc, pour chaque octet qui commence comme [00000000] en bits, le résultat est [11111111].
signifie exactement que projet de Loi dit. À utiliser-1L, etc. est de moins en moins potable comme
-1L
ne peut pas avoir une représentation de tous les bits définis.OriginalL'auteur Bill