Je lisais un code du noyau, et à un endroit, j'ai vu une expression dans une instruction if
comme
if (value == (SPINLOCK_SHARED | 1) - 1) {
............
}
où SPINLOCK_SHARED = 0x80000000
est une constante prédéfinie.
Je me demande pourquoi avons-nous besoin de (SPINLOCK_SHARED | 1) - 1
- à des fins de conversion de type? le résultat de l'expression serait 80000000-- identique à 0x80000000, n'est-ce pas? pourtant, pourquoi ORing 1 et Subtracting 1 sont importants?
J'ai l'impression que je manque pour obtenir quelque chose ..
La plupart comme cela est fait pour gérer plusieurs cas supplémentaires. Par exemple, dans ce cas, nous disons que SPINLOCK_SHARED
ne peut pas être 1:
int SPINLOCK_SHARED = 0x01
int res = (SPINLOCK_SHARED | 1) - 1 // 0