Si j'utilise ceci: if(value & 4)
pour vérifier si le bit est défini, comment puis-je vérifier si le bit n'est pas défini?
J'ai essayé avec if(!value & 4)
ou if(~value & 4)
et if(value ^ 4)
mais aucun d'entre eux ne fonctionne.
Lorsque vous écrivez if(value & 4)
, C vérifie que le résultat est différent de zéro. Essentiellement, cela signifie
if((value & 4) != 0) {
...
}
Par conséquent, si vous souhaitez vérifier que le bit est pas set, comparez le résultat pour l'égalité à zéro:
if((value & 4) == 0) {
...
}
Vous pouvez le faire de plusieurs façons, mais la plus simple (la plus facile, nécessitant le moins de réflexion) serait tout simplement de nier toute l'expression que vous avez déjà:
if (!(value & 4))
Simplement:
if ((value & 4) == 0)
Pourquoi?
Si value
est 01110011
Ensuite
01110011
&
00000100
--------
Renverra 0 car le 4ème bit est désactivé.
la ligne de hastebin est mal écrite, a un code inaccessible et dépend fortement de la préséance des opérateurs C. Et ne fonctionne pas comme prévu.
La ligne de hastebin:
if( cur_w > source.xpos + source.width
&&
!(source.attributes & DBOX_HAS_SHADOW) )
{
break;
return;
}
il devrait être écrit comme:
if( (cur_w > (source.xpos + source.width)) // has curr_w exceeded sum of two other fields?
&&
((source.attributes & DBOX_HAS_SHADOW) != DBOX_HAS_SHADOW ) //is bit == 0?
{
break;
}