j'ai vu un code qui ressemble à ceci:Pourquoi 0xff égal à négatif 0 en C++
Object *area = new Object[n];
memset(area, 0xff, sizeof(Object) * count);
Alors Remplit tous les champs de tableau d'objets avec le bit 1. Plus tard, il y a plusieurs endroits vérifier si le champ d'un objet n'a pas été rempli encore en vérifiant contre ~ 0 (zéro négatif):
const unsigned int NULL_INDEX = ~0;
...
if(object.field == NULL_INDEX) {...}
Le champ de cette classe d'objets est de type unsigned int. Je suis confus que pourquoi 0xff peut être évalué pour être égal à ~ 0, sur int non signé? J'ai vu un autre post parler de 0xff est égal à -1 sur le système de complément de 2, et a trouvé un autre post qui je pense que cela signifie que si un programme C++ interprète 0xff pour être -1 ou ~ 0 dépend du système?
Quelle est exactement la manière portable en C++ de vérifier l'entier lorsqu'il est rempli avec 0xff? Cela devrait-il être vérifié par rapport à un int non signé ou à un int signé? Je suis tellement confus ...
'~ 0' n'est pas négatif 0. –
~ inverser chaque bit. – Phil1970
Il n'y a pas de 0 négatif pour les entiers dans la représentation la plus commune (complément à 2). – Phil1970